(Mac) создание событий клавиатуры вызывает утечки памяти

Использование памяти моего приложения постоянно увеличивается, каждый раз, когда я создаю событие клавиатуры, используя 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 говорит, что нет утечек памяти...

В чем здесь проблема?

Спасибо за помощь!

1 ответ

Решение

Итак, решение довольно простое. Вам нужно только создать свой 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 за предложение.

Другие вопросы по тегам