17

次のコードはメインスレッドで実行されますか?「メインキュー」はメインスレッドを指しますか?

dispatch_async(dispatch_get_main_queue(),
^{
   // Some code
});
4

3 に答える 3

28

ディスパッチ非同期対同期の非同期部分は、同時対シリアルとは異なります。非同期は関数がすぐに戻ることを意味し、同期はブロックが実行されるまで待機することを意味します。メインスレッド/キューはシリアルであるため、物事は順番に実行されます-これは、ディスパッチ元と同じスレッドで非同期ディスパッチを要求しているため、すぐに返され、それまで待つことを意味すると思います現在の実行ループの最後とキュー内の他のものを終了してから、ブロックを実行します。

これは、メイン スレッド上よりもキュー内で使用する方が便利です。データを処理したり、UI に更新を通知したり、すべてが再描画されるのを待たずに処理を続行したりできます。単なるdispatch_syncではなく、別のdispatch_async(同時キュー)内のメインスレッドへの呼び出し。

于 2012-05-11T20:24:39.700 に答える
24

はい。Apple 開発者サイトから:

ディスパッチ フレームワークは、アプリケーションが使用するデフォルトのシリアル キューを提供します。このキューには、dispatch_get_main_queue() を介してアクセスします。

于 2012-05-11T20:16:28.980 に答える
8

これは、それ自体のドキュメントをdispatch_get_main_queue()含む複数の場所で文書化されています。コンカレンシー プログラミング ガイドには次のように書かれています。

メイン ディスパッチ キューは、アプリケーションのメイン スレッドでタスクを実行するグ​​ローバルに使用可能なシリアル キューです。

于 2012-05-11T20:18:59.727 に答える