0

ビューが表示されるたびに実行する必要のある長時間実行タスク(つまり、DBから複雑なデータを取得する)があります。パフォーマンス上の理由から、長時間実行されているタスクをメインスレッドから削除したいことはわかっています。また、UIに関連することを行うには、メインスレッドに戻る必要があることも知っています。私はこれを達成するための正しいGCDパターンを見つけようとしています。私がGCDドキュメントで見たものから、これは物事を行うための「正しい」方法のようですが、人々が別のパターンがより有用であると思ったかどうか興味があります。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     // Add long running code for off the UI thread here.  

     dispatch_async(dispatch_get_main_queue(), ^{

          // Add UI updating code here back on the UI thread.

     });
});

私は基本的に非同期で(つまり、UIスレッドをブロックしない)別のスレッドに移動し、いくつかのことを行ってから、メインスレッドに戻ってUIを更新すると言っています。

4

1 に答える 1

1

あなたのアプローチは良いです。私が見ることができる唯一の欠点は、長時間実行されている操作をキャンセルする方法がないことです。これにより、メモリやその他のリソースの輻輳が発生する可能性があります。

于 2013-01-02T14:46:22.000 に答える