我CGEventRef
以两种方式拦截 s:
- 返回值
NULL
杀死事件 - 为事件分配新的
CGEventRef
通过CGEventCreateKeyboardEvent()
Xcode 的分析器告诉我在创建新事件时可能存在泄漏。但我需要返回那个新事件,所以我不能CFRelease
在那里。
这个 Xcode 错误有效吗?
我应该在哪里正确
CFRelease
设置我创建的新 CGEventRef?在 null 和 new 事件的情况下,我不知道是否需要释放事件的以前的值。
将“新”附加到方法名称是解决此问题的正确方法吗?对于我创建新事件的情况,我认为可能是这样。但是其他情况呢?
.
- (CGEventRef)modifySomeKeyboardEvents:(CGEventRef)event {
CGKeyCode keycode = (CGKeyCode)CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode);
NSLog(@"keycode: %d", keycode);
switch (keycode) {
case 0:
NSLog(@"pressed 'a'");
//Kill the event
event = NULL;
//Is a `CFRelease` of some kind needed here, to release the previous value?
break;
case 38:
NSLog(@"pressed 'h'");
//Send different character:
CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef newKeyEvent = CGEventCreateKeyboardEvent(eventSource, 1, true);
CGEventSetIntegerValueField(newKeyEvent, kCGKeyboardEventKeycode, 51); // keycode '51' = backspace
CFRelease(eventSource);
event = newKeyEvent;
//Can't CFRelease here, but somewhere?
//CFRelease(newKeyEvent);
break;
default:
break;
}
//Xcode error: "Potential leak of an object stored in newKeyEvent"
return event;
}