2011-07-25 31 views
2

删除动态NSMenuItem的我有一个包含一些动态项目的NSMenu。这些项目是在NSMenuDelegate的menuNeedsUpdate方法中创建的,并且每个都分配了一个representationObject。我正在修剪对象图形,希望通过删除所有动态项目(并在菜单重新打开时重新创建它们)来关闭菜单时重新获得一点内存。我遇到的问题是确切知道应该在哪里以及如何处理。当从一个NSMenu

的文档指出NSMenu的menuDidClose不更新菜单的内容合适的地方。我已经设置了一个通知来侦听NSMenuDidEndTrackingNotification,并通过调用我的NSMenu的removeItem:方法删除当前的动态项目。这是处理这种情况的正确方法吗?

最后,我可以放心,打电话的removeItem上NSMenuItem将正确废掉可以分配给它的任何自定义视图,以及任何子菜单?

回答

1

我最近有这个问题。你是绝对正确的。 menuDidClose:不是删除菜单项的地方。我尝试过,但它导致操作方法不能从菜单项发送。我发现正确的解决方案是,据我所知,使用NSMenuDidEndTrackingNotification通知。它也很棒。

是,removeItem应该释放的菜单项。如果您有一些自定义NSMenuItem子类,您可以在其中明确分配某些视图,那么当然必须根据需要实施dealloc方法。如果你使用垃圾收集,不用担心这一点。无论如何,你应该总是使用仪器来确保你没有任何泄漏。