0

每次我使用 Quartz Event Services 创建键盘事件时,我的应用程序的内存使用量都会永久增加。

以下是无限循环内有问题的代码:

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说没有内存泄漏...

这里有什么问题?

谢谢您的帮助!

4

1 回答 1

0

好的,所以解决方案非常简单。您只需要创建CGEventSourceRef一次,然后您可以在每次发布活动时重复使用它。CGEventSourceRef一遍又一遍地创建你的会导致“泄漏”发生。

正确的代码如下所示:

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

于 2018-08-03T12:46:09.177 回答