4

一連のを作成し、NSOperationそれらをキューで実行しようとしています。

それらはすべてシーケンシャルで、一度に1つずつ実行されます。

これらの操作は、Webからデータをフェッチし、コアデータ管理対象オブジェクトを作成して保存します。

アプリケーションが終了する状況をどのように処理しますか?操作はデタッチされたスレッドで実行されるので、現在の操作が「安全に」終了するまでメインスレッドを待機させるにはどうすればよいですか?スレッド(操作)が完了する前に終了して満足している状況があります。これは、アプリをさらに起動すると、ジョブが続行され、中断したところから再開されるためです。

どうもありがとう、

マイク

4

2 に答える 2

5

isCancelled適切な安全な時間 (開始時、操作の 1 つの段階が完了した後など) にプロパティをチェックし、その時点で救済されるように操作を設計します。でapplicationWillTerminate、オペレーション キューに-cancelAllOperationsメッセージを送信し、それに続いて-waitUntilAllOperationsAreFinishedメッセージを送信します。これは、キュー内のすべての操作が完了するまでブロックされます。すべての操作がisCancelled適切に処理される場合、これによってアプリケーションの終了が大幅に遅くなることはありません。

-waitUntilAllOperationsAreFinished注意すべきことの 1 つは、 がから呼び出されるとapplicationWillTerminate、メイン スレッドでブロックされるという事実です。操作のいずれかがメイン スレッドでセレクターを実行すると、その時点でアプリケーションがフリーズします。

于 2009-10-14T17:56:17.483 に答える
2

指定した時間内にアプリが自動的に終了しない場合、アプリは強制的に終了されます。そのため、インターネットからデータが転がり込むのを待つのは得策ではないかもしれません。

しかし、あなたはすでに答えを出しています。設計によって操作をアトミックにするだけです。つまり、操作はジョブ (ダウンロード + データの保存) を完了するか、次回の起動時に再度実行する必要があるということです。ジョブが完了する前にアプリが終了した場合は、ジョブのすべての一時データがロールバックされることを確認してください。

于 2009-10-14T15:25:20.993 に答える