从后台线程SWIFT更新UI

时间:2015-01-25 14:17:39

标签: multithreading macos user-interface swift

我将此代码用于后台工作:

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上执行

1 个答案:

答案 0 :(得分:7)

Thread Safety Summary "线程编程指南"规定:

  

仅主要线程类

     

以下类只能从a的主线程中使用   应用

     
      
  • NSCell及其所有后代
  •   
  • NSView及其所有后代。   有关更多信息,请参阅NSView限制。
  •   

绑定到主线程的唯一调度队列是 使用dispatch_get_main_queue()获得的主要队列。

dispatch_get_global_queue()返回全局并发队列 这是主队列,因此可以执行其工作 在辅助线程上。因此,从此队列更新UI 可能偶然工作,但也可能导致UI更新延迟, 非工作UI更新或崩溃。