dispatch_async会等到上一行完成后再继续吗?

时间:2012-06-03 16:10:18

标签: iphone objective-c ios grand-central-dispatch

dispatch_queue_t queue = dispatch_queue_create("setup_cell", NULL);

dispatch_async(queue, ^{
    //Line 1
    //Line 2
});

在调用第2行之前,它会等到第1行完成吗?

2 个答案:

答案 0 :(得分:2)

是(在大多数情况下)。与C类似,Objective-C是一种自上而下的语言,这意味着通常,在另一个代码块之上发生的块代码将在它之前执行。

这种不会发生的唯一真正方法是通过编译器优化,但我不担心它,因为编译器通常足够智能,即使通过它们所做的所有优化也能保持代码自上而下。

答案 1 :(得分:0)

是和否。

是:如果第1行和第2行只是直接顺序代码。

否:如果第1行或第2行是任何并发队列。例如:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//
});
相关问题