NSEvent addLocalMonitorForEventsMatchingMask Memory Leak - PullRequest
0 голосов
/ 10 декабря 2018

Здесь снова с другой проблемой утечки памяти.У меня есть элемент NSStatusItem, который я пытаюсь зафиксировать щелчком мыши и реагировать на него.Следующий код приводит к тому, что инструменты сообщают об утечке, а удаление этого кода приводит к тому, что инструменты сообщают об отсутствии утечек:

[NSEvent addLocalMonitorForEventsMatchingMask:(NSLeftMouseDown | NSLeftMouseDownMask | NSRightMouseDown | NSRightMouseDownMask)
                                              handler:^NSEvent *(NSEvent *event)
         {
             if (event.window == self.statusItem.button.window)
             {
                 [self statusItemClicked:self.statusItem.button];
                 return nil;
             }
             return event;
         }];

Советы по правильной реализации этого будут очень полезны!Спасибо!

Instruments Leak

1 Ответ

0 голосов
/ 10 декабря 2018

Метод addLocalMonitorForEventsMatchingMask:handler: возвращает объект монитора.Вы можете передать объект в removeMonitor:, когда он вам больше не нужен, и хотите, чтобы система прекратила отправлять ему события.

Монитор событий создает цикл сохранения, включающий в себя сам.Это поддерживает монитор в рабочем состоянии, даже если вы не сохраняете ссылку на монитор.Этот цикл сохранения отображается как утечка объектов в Инструментах.

Если вы хотите предотвратить появление утечек в Инструментах, сохраните монитор (возвращаемый addLocalMonitor...) где-нибудь, как в переменной экземпляра на вашем компьютере.делегат приложения.

...