【发布时间】:2012-06-03 16:10:18
【问题描述】:
dispatch_queue_t queue = dispatch_queue_create("setup_cell", NULL);
dispatch_async(queue, ^{
//Line 1
//Line 2
});
这会等到第 1 行完成后再调用第 2 行吗?
【问题讨论】:
标签: iphone objective-c ios grand-central-dispatch
dispatch_queue_t queue = dispatch_queue_create("setup_cell", NULL);
dispatch_async(queue, ^{
//Line 1
//Line 2
});
这会等到第 1 行完成后再调用第 2 行吗?
【问题讨论】:
标签: iphone objective-c ios grand-central-dispatch
是的(在大多数情况下)。 Objective-C 和 C 一样是一种自顶向下的语言,这意味着通常发生在另一个代码块之上的块代码将在它之前执行。
不会发生这种情况的唯一真正方法是通过编译器优化,但我不会担心,因为编译器通常足够聪明,即使通过它们所做的所有优化,也可以保持代码自上而下。
【讨论】:
是和否。
是:如果第 1 行和第 2 行只是直接的顺序代码。
否:如果第 1 行或第 2 行是任何并发队列。例如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//
});
【讨论】: