質問

次のようなウィンドウを表示するとします:

  

[[TBAddTaskWindowController new] showWindow:self];

TBAddTaskWindowControllerオブジェクトはどこでリリースされる予定ですか? windowWillCloseで[自己解放]を呼び出す一般的な解決策はありますか?

他のオブジェクトを「所有」する権利はありません。ウィンドウ。ユーザーが閉じるまで存在するためです。

役に立ちましたか?

解決

new メッセージをクラスに送信してウィンドウコントローラーをインスタンス化した同じコード。 alloc および initで実行した場合と同じです。 メッセージ。

他のヒント

はい、ウィンドウコントローラーをリリースする一般的な方法は次のとおりです:

- (void)windowWillClose:(NSNotification *)notification
{
    [self autorelease];
}

ウィンドウコントローラーは、ウィンドウが周囲にある間のみ存続する必要があるため、ウィンドウが消えたときに自動解放するのは理にかなっています。

他のオブザーバーなども削除することを忘れないでください。


[ARCでの作業に関する情報を追加]

ARCの場合、ウィンドウが開いている間はウィンドウコントロールへの強い参照を保持し、ウィンドウが閉じるときに削除する必要があります。
これを行うために、2つの方法で制御されるウィンドウにカテゴリを追加しました。

  • pnl_addWindowController —ウィンドウが最初に開かれたときにウィンドウコントローラーによって呼び出されます
  • pnl_removeWindowController — windowWillClose
  • から呼び出されます

このカテゴリは、アクティブなウィンドウコントローラーのグローバルな NSMutableSet を維持します。コードは基本的に [gWindowControllers addObject:self] [gWindowControllers removeAllObjects] であり、NSMutableSetの遅延作成とロックが含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top