Когда удалять динамические NSMenuItem из NSMenu

У меня есть NSMenu, который содержит ряд динамических элементов. Эти элементы создаются в методе NSMenuDelegate menuNeedsUpdate, и каждому назначается представленный объект. Я хочу обрезать граф объектов и, надеюсь, восстановить немного памяти при закрытии меню, удалив все динамические элементы (и воссоздав их при повторном открытии меню). Проблема, с которой я сталкиваюсь, заключается в том, чтобы точно знать, где и как это должно быть обработано.

В документации указано, что menuDidClose NSMenu не является подходящим местом для обновления содержимого меню. Я настроил уведомление для прослушивания NSMenuDidEndTrackingNotification и удаляю динамические элементы в этот момент с помощью вызова моего метода NSMenu removeItem:. Это правильный способ справиться с этой ситуацией?

Наконец, могу ли я быть уверен, что вызов removeItem для NSMenuItem корректно аннулирует любые пользовательские представления, которые могут быть назначены ему, а также любые подменю?


person ndg    schedule 25.07.2011    source источник


Ответы (1)


У меня была эта проблема недавно. Ты совершенно прав. menuDidClose: не место для удаления пунктов меню. Я попробовал это, но это привело к тому, что методы действий не отправлялись из пунктов меню. Я обнаружил, что правильным решением, насколько я понимаю, является использование уведомления NSMenuDidEndTrackingNotification. Это также прекрасно работает.

Да, removeItem должен освободить пункт меню. Если у вас есть какой-то пользовательский подкласс NSMenuItem, в котором вы явно выделяете некоторые представления, вам, конечно, придется реализовать метод dealloc по мере необходимости. Если вы используете сборку мусора, вам вообще не о чем беспокоиться. В любом случае, вы всегда должны использовать инструменты, чтобы убедиться, что у вас нет утечек.

person Enchilada    schedule 30.07.2011