异步块的区别?

时间:2015-04-14 10:37:51

标签: ios objective-c swift

以下异步阻止区有什么区别?

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")

        })
})

1 个答案:

答案 0 :(得分:3)

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

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