【问题标题】:Difference of async blocks? [closed]异步块的区别? [关闭]
【发布时间】:2015-04-14 10:37:50
【问题描述】:

以下异步块有什么区别?

Run Background Task as Loop in Swift

func delay(delay:Double, closure:()->()) {
  dispatch_after(
    dispatch_time(
      DISPATCH_TIME_NOW,
      Int64(delay * Double(NSEC_PER_SEC))
    ),
    dispatch_get_main_queue(), closure)
}

和:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), { () -> Void in
        println("do some background task")

        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            println("update some UI")

        })
})

【问题讨论】:

  • 请问?所涉及的所有方法都有出色的文档,并且它们的行为都与文档完全一致。除此之外,一个使用我们不知道的闭包,另一个调用 println 两次。您的实际问题是什么?
  • 看起来你只是从另一个问题的答案中复制了一些东西,破坏了所有上下文,因此变得毫无意义。

标签: ios objective-c swift


【解决方案1】:

第一个代码不在后台执行任务 - 它一直等到 delay 启动,然后调用作为参数提供给 delay 函数的闭包。

第二个代码在后台执行任务。 dispatch_async 对于执行可能阻塞主线程的任务很有用,例如从网络获取一些数据。如果主线程被阻塞,UI 将变得无响应,直到任务完成,这显然是非常不可取的!此外,还有第二个 dispatch_async 调用,这次使用主线程,因为 UI 应该始终在主线程上更新。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2015-02-28
    相关资源
    最近更新 更多