2011-07-25 10 views
2

私はいくつかの動的項目を含むNSMenuを持っています。これらのアイテムは、NSMenuDelegateのmenuNeedsUpdateメソッドで作成され、それぞれにはassignedObjectが割り当てられます。私は、オブジェクトグラフをトリミングし、うまくいけば、メニューが閉じられたときにすべての動的項目を削除して(そしてメニューが再オープンされたときに再作成されるように)少しのメモリを取り戻そうとしています。私が抱えている問題は、どこでどのようにこれを処理すべきかを正確に知ることです。NSMenuから動的NSMenuItemを削除する場合

NSMenuのmenuDidCloseは、メニューの内容を更新するのに適していないと書かれています。 NSMenuDidEndTrackingNotificationをリッスンする通知をセットアップして、その時点でNSMenuのremoveItem:メソッドへの呼び出しで動的項目を削除しています。これはこの状況を処理する正しい方法ですか?

最後に、NSMenuItemのremoveItemを呼び出すと、それに割り当てられるカスタムビューやサブメニューが完全に無効になることはありますか?

答えて

1

最近この問題が発生しました。あなたは絶対に正しいです。 menuDidClose:はメニュー項目を削除する場所ではありません。私はそれを試しましたが、メニュー項目からアクションメソッドを送信しないようにしました。正しい解決方法は、私が見る限り、NSMenuDidEndTrackingNotification通知を使用することです。それは素晴らしい作品です。

はい、removeItemは、メニュー項目を解放する必要があります。いくつかのビューを明示的に割り当てるカスタムのNSMenuItemサブクラスがある場合は、もちろん、必要に応じてdeallocメソッドを実装する必要があります。ガベージコレクションを使用している場合は、このことについてまったく心配するべきではありません。いずれにしても、常に漏れがないことを確認するために、Instrumentsを使用する必要があります。

関連する問題