(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 за предложение.