这里再次出现了另一个内存泄漏问题。我有一个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;
}];关于如何正确地实现这一点的建议将不胜感激!谢谢!

发布于 2018-12-10 17:51:14
addLocalMonitorForEventsMatchingMask:handler:方法返回监视器对象。当您不再需要对象并希望系统停止向其发送事件时,可以将对象传递给removeMonitor:。
事件监视器创建一个涉及自身的保留周期。这样,即使不保留对监视器的引用,监视器也会保持活力。这个保留周期显示为仪器中的泄漏对象。
如果要防止泄漏出现在仪器中,请将监视器(由addLocalMonitor...返回)存储在某个地方,比如应用程序委托的实例变量中。
https://stackoverflow.com/questions/53710389
复制相似问题