3

私は NSDocument ベースの Cocoa アプリを持っており、ユーザーがドキュメント ウィンドウを閉じたとき、またはアプリケーションが終了したときに、正常に終了する (現在のループを実行するのを待つ) 必要があるセカンダリ スレッドがいくつかあります。私は canCloseDocumentWithDelegate を使用して、ドキュメントが閉じているときにスレッドにフラグを送信し、それらが完了すると、そのうちの 1 つが [NSDocument close] を呼び出します。これは、ユーザーがドキュメント ウィンドウを閉じるとうまく機能するように見えますが、アプリを終了すると、さまざまな問題が発生します (何かを呼び出す前にクラッシュします)。このような場合の正しい手順は何ですか?

4

1 に答える 1

4

可能な限り最善の方法は、スレッドが処理を中止してできるだけ早く終了できるようになるまで、実行中の処理を終了するために必要なオブジェクトをスレッドが所有することです。

非 GC では、これは、完了時-retainにスレッド-releaseが s であることを意味します。GC の場合、必要なオブジェクトへの単なるハード リファレンスです。

ドキュメントを閉じる前に、処理を完了しなければならない何らかの長い処理がある場合は、進行状況バーを含むシートをドロップし、完了するまでドキュメントをモーダルのままにしておきます (Aperture と iPhoto の両方がまさにこれを行います)。

于 2010-02-22T21:31:27.913 に答える