我将此代码用于后台工作:
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, {
// Some work in the background and updating UI too.
});
但是我正在阅读我们应该使用的here:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
dispatch_async(dispatch_get_main_queue()) {
// update some UI
}
}
更新UI时。 我的问题是:在我使用的代码示例中,UI在全局队列中得到更新,UI更新没有错误。我正在使用的方法与上面链接中提到的方法有什么区别?
P.S:代码在Mac OS X 10.10上执行
答案 0 :(得分:7)
Thread Safety Summary "线程编程指南"规定:
仅主要线程类
以下类只能从a的主线程中使用 应用
NSCell
及其所有后代NSView
及其所有后代。 有关更多信息,请参阅NSView限制。
绑定到主线程的唯一调度队列是
使用dispatch_get_main_queue()
获得的主要队列。
dispatch_get_global_queue()
返回全局并发队列
这是不主队列,因此可以执行其工作
在辅助线程上。因此,从此队列更新UI
可能偶然工作,但也可能导致UI更新延迟,
非工作UI更新或崩溃。