5

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 のドキュメントを検索しましたが、どのプラクティスを使用すべきかについては何も見つかりませんでした。それはカバーすべき非常に基本的なもののように聞こえるので、間違った用語で検索しているだけかもしれません.

4

2 に答える 2

5

通常は、ウィンドウ コントローラーを保持し、使い終わったときにのみ解放します。あなたのアプリデリゲートがそれを担当すると思います。複数ある可能性がある場合は、それらを配列に格納するだけです。あなたのソリューションは機能するかもしれませんが、あまりエレガントではありません。

ドキュメント ベースの Cocoa アプリで作業している場合は、ドキュメント サブクラス メソッド makeWindowControllers でウィンドウ コントローラーを作成し、そのクラスにウィンドウ コントローラーへのポインターを保持させます。

于 2011-06-14T16:00:56.157 に答える