NSEvent addLocalMonitorForEventsMatchingMask内存泄漏

时间:2018-12-10 17:07:19

标签: objective-c xcode cocoa memory-leaks nsevent

再次出现另一个内存泄漏问题。我有一个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 :(得分:1)

addLocalMonitorForEventsMatchingMask:handler:方法返回监视对象。您可以在不再需要该对象并希望系统停止向其发送事件时将其传递给removeMonitor:

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

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