NSEvent addLocalMonitorForEventsMatchingMask 内存泄漏

NSEvent addLocalMonitorForEventsMatchingMask Memory Leak

这里又出现了另一个内存泄漏问题。我有一个 NSStatusItem,我试图捕获鼠标点击并做出反应。以下代码会导致 Instruments 报告泄漏,删除此代码会导致 Instruments 报告无泄漏:

[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;
         }];

非常感谢有关如何正确实施的建议!谢谢!

addLocalMonitorForEventsMatchingMask:handler:方法returns监控对象。当您不再需要它并希望系统停止向它发送事件时,您可以将对象传递给 removeMonitor:

事件监视器创建一个涉及自身的保留循环。即使您不保留对监视器的引用,这也会使监视器保持活动状态。此保留周期在 Instruments 中显示为泄漏对象。

如果您想防止泄漏出现在 Instruments 中,请将监视器(由 addLocalMonitor... 返回)存储在某个地方,例如在您的应用委托的实例变量中。