Cocoa アプリケーションを作成していますが、ウィンドウ コントローラの使用について質問があります。ユーザーがメニュー バーから [新規] を選択すると、NSWindowController のサブクラスである MyWindowController のインスタンスが作成され、MyWindow.xib から新しいウィンドウが表示されるという考え方です。
アプリケーションデリゲートでアクションを処理しています。私が見たところ、次のようなことができるかもしれません。ウィンドウが表示されると、ウィンドウコントローラーへのポインターを保存する理由がなくなり、ポインターを割り当てたので、ウィンドウを表示する前に自動解放します。
[[[[MyWindowController alloc] init] autorelease] showWindow:self];
その後すぐにウィンドウが解放されるため、ウィンドウは画面に短時間表示されてから消えます。-showWindow: メソッドでウィンドウ コントローラーを保持し、windowWillClose 通知を受け取ったら解放するという解決策を見つけました。
- (IBAction)showWindow:(id)sender
{
[self retain];
[[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillCloseNotification
object:self.window
queue:nil
usingBlock:^(NSNotification *note) {
[self release];
}];
[super showWindow:sender];
}
これを行うより良い方法はありますか?Apple のドキュメントを検索しましたが、どのプラクティスを使用すべきかについては何も見つかりませんでした。それはカバーすべき非常に基本的なもののように聞こえるので、間違った用語で検索しているだけかもしれません.