何时从NSMenu中删除动态NSMenuItem

时间:2011-07-25 13:54:18

标签: cocoa nsmenuitem nsmenu

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

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

最后,我可以放心,在NSMenuItem上调用removeItem会正确地取消可能分配给它的任何自定义视图以及任何子菜单吗?

1 个答案:

答案 0 :(得分:1)

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

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