次のコードはメインスレッドで実行されますか? 「メインキュー」はメインスレッドを指しますか?
dispatch_async(dispatch_get_main_queue(),
^{
// Some code
});
ディスパッチ非同期vs同期の非同期部分は、同時vsシリアルとは異なります。非同期とは、関数がすぐに戻ることを意味し、同期とは、ブロックが実行されるまで待機することを意味します。メインスレッド/キューはシリアルであるため、順番に実行されます-I believeこれは、ディスパッチ元のスレッドと同じスレッドで非同期ディスパッチするように要求していることを意味します。 'すぐに戻り、現在の実行ループとキュー内の他のすべてが終了するまで待ってから、ブロックを実行します。
これは、メインスレッドよりもキュー内で便利です。データを処理し、UIに更新を通知し、すべてが再描画されるのを待たずに処理を続行できます。そのため、dispatch_asyncがよく表示されます。単なるdispatch_syncではなく、別のdispatch_async(同時キュー)内のメインスレッドを呼び出します。
はい。から Appleデベロッパサイト :
ディスパッチフレームワークは、アプリケーションが使用するデフォルトのシリアルキューを提供します。このキューには、dispatch_get_main_queue()を介してアクセスします。
これは、 dispatch_get_main_queue()
自体のドキュメント を含む複数の場所で文書化されています。 並行性プログラミングガイド は次のように述べています。
メインディスパッチキューは、アプリケーションのメインスレッドでタスクを実行するグローバルに利用可能なシリアルキューです。