【问题标题】:Does dispatch_async wait until the previous line is finished before continuing?dispatch_async 是否等到上一行完成后再继续?
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      是和否。

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

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

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      //
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 2019-11-01
        • 2021-05-06
        相关资源
        最近更新 更多