web-dev-qa-db-ja.com

dispatch_get_main_queue()を使用することは、私のコードがメインスレッドにあることを意味しますか?

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

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

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

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

28
Jack Lawrence

はい。から Appleデベロッパサイト

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

24
Patrick Perini

これは、 dispatch_get_main_queue()自体のドキュメント を含む複数の場所で文書化されています。 並行性プログラミングガイド は次のように述べています。

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

8
jscs