(Mac) 创建键盘事件导致内存泄漏
(Mac) creating keyboard events causes memory leaks
每次我使用 Quartz 事件服务创建键盘事件时,我的应用程序的内存使用量都会永久增加。
以下是无限循环中有问题的代码:
int keyCode = 0;
BOOL keyDownBool = FALSE;
while (TRUE) {
/* creating a keyboard event */
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
CGEventRef keyboardEvent =
CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, keyDownBool);
CFRelease(source);
CFRelease(keyboardEvent);
}
Instruments.app
表示没有内存泄漏...
这里有什么问题?
感谢您的帮助!
好的,所以解决方案非常简单。您只需创建一次 CGEventSourceRef
,然后您可以在每次 post 活动时重复使用它。一遍又一遍地创建 CGEventSourceRef
会导致 "leaks" 发生。
正确的代码如下所示:
int keyCode = 0;
BOOL keyDownBool = FALSE;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
while (TRUE) {
/* creating a keyboard event */
CGEventRef keyEvent =
CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, keyDownBool);
CFRelease(keyEvent);
}
感谢@Willeke 的建议。
每次我使用 Quartz 事件服务创建键盘事件时,我的应用程序的内存使用量都会永久增加。
以下是无限循环中有问题的代码:
int keyCode = 0;
BOOL keyDownBool = FALSE;
while (TRUE) {
/* creating a keyboard event */
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
CGEventRef keyboardEvent =
CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, keyDownBool);
CFRelease(source);
CFRelease(keyboardEvent);
}
Instruments.app
表示没有内存泄漏...
这里有什么问题?
感谢您的帮助!
好的,所以解决方案非常简单。您只需创建一次 CGEventSourceRef
,然后您可以在每次 post 活动时重复使用它。一遍又一遍地创建 CGEventSourceRef
会导致 "leaks" 发生。
正确的代码如下所示:
int keyCode = 0;
BOOL keyDownBool = FALSE;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
while (TRUE) {
/* creating a keyboard event */
CGEventRef keyEvent =
CGEventCreateKeyboardEvent(source, (CGKeyCode)keyCode, keyDownBool);
CFRelease(keyEvent);
}
感谢@Willeke 的建议。