(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 的建议。