dispatch_queue_t queue = dispatch_queue_create("setup_cell", NULL);
dispatch_async(queue, ^{
//Line 1
//Line 2
});
これは、ライン 2 を呼び出す前に、ライン 1 が終了するまで待機しますか?
dispatch_queue_t queue = dispatch_queue_create("setup_cell", NULL);
dispatch_async(queue, ^{
//Line 1
//Line 2
});
これは、ライン 2 を呼び出す前に、ライン 1 が終了するまで待機しますか?
はい (ほとんどの場合)。Objective-C は、C と同様にトップダウン言語です。つまり、通常、別のコード ブロックの上で発生するブロック コードは、その前に実行されます。
これが起こらない唯一の現実的な方法は、コンパイラーの最適化によるものですが、私はそれについて心配する必要はありません。なぜなら、コンパイラーは通常、最適化を行ってもコードをトップダウンに保つほど賢いからです。
はいといいえ。
はい:1行目と2行目が単純なシーケンシャルコードの場合。
いいえ:1行目または2行目が並行キューのいずれかである場合。例えば:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//
});