Когда удалять динамические NSMenuItem's из NSMenu - PullRequest
2 голосов
/ 25 июля 2011

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

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

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

1 Ответ

1 голос
/ 30 июля 2011

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

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

...