以下异步阻止区有什么区别?
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")
})
})
答案 0 :(得分:3)
第一个代码不在后台执行任务 - 它等待delay
启动,然后调用作为delay
函数的参数提供的闭包。
第二个代码在后台执行任务。 dispatch_async
对于执行可能阻塞主线程的任务非常有用,例如从网络中获取一些数据。如果主线程被阻止,UI将无法响应,直到任务完成,这显然是非常不受欢迎的!此外,还有第二次dispatch_async
调用,这次使用主线程,因为UI应该始终在主线程上更新。