3

NSDocumentとしてサブクラス化するドキュメントベースの Cocoa アプリケーションがありますMyDocument。それぞれMyDocumentが個別のバックグラウンド プロセスを ( としてNSTask) 管理します。NSTask対応するMyDocumentアプリケーションが閉じたとき、またはアプリケーション全体が終了したときに、が終了することを確認したいと思います。

後者については、ドキュメントを監視させます。前者については、メソッドNSApplicationWillTerminateNotification. をオーバーライドします。close

-(void)close {
    // Cleanup code here
    [super close];
}

dealloc(ちなみに、プロジェクトは GC されているため、クリーンアップ コードをメソッドに入れることはできません。)

問題は次のとおりです。 を開き、MyDocument保存されていない変更を加えてから cmd-Q を押すと、closeメソッドが2 回呼び出されます。デバッガーからのコール チェーンは次 のとおり[MyDocument close]です。(その呼び出しの後、アプリケーションは終了します)。[NSDocument close][NSWindowController _windowDidClose][MyDocument close]

これは予想される動作ですか?もしそうなら、ドキュメント固有のリソースを解放するより良い方法はありますか? それとも、close安全に複数回実行できるようにする必要がありますか?

4

1 に答える 1

1

cocoadev メーリング リストへの投稿で、現時点ではこれがフレームワークの通常の動作である (ただし、将来変更される可能性がある) という投稿を見たことがあると思います。-closeメソッドが 1 回だけ呼び出されるという保証は AppKit によって行われないため、複数の呼び出しを処理できるようにメソッドを堅牢にする必要があります。

NSApplicationWillTerminateNotification私が正しく理解していれば、あなたのアプリもそうである場合、タスクは自動的に終了するので、あなたが気にする必要はないと思います。さらに、突然の終了をサポートしている場合、いずれにせよ、通知/通知なしでアプリを強制終了できます。

于 2013-04-09T08:26:30.347 に答える