队列和Swift 3问题

时间:2016-09-17 13:09:27

标签: ios swift queue swift3

请帮我将此行转换为swift 3.0:

dispatch_async(DispatchQueue.global(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0))

它究竟意味着什么?类似于:在主队列中的括号中执行代码?

提前致谢。

PS。这行代码取自apple's code以处理核心数据

2 个答案:

答案 0 :(得分:7)

在Swift 3中你可以像这样写

DispatchQueue.global(qos: .background).async {

}

这意味着括号中所写的每个代码都将在后台执行。如果要在此后台线程中进行任何更改,则必须切换到主线程。通过写下面的块。

dispatch_async(dispatch_get_main_queue()) { 
     // Your code for UI Changes.
}

编辑:Swift 3

DispatchQueue.main.async {
}

答案 1 :(得分:2)

Grand Central Dispatch(GDC)模式中最常见的任务之一是在全局后台队列上执行工作,并在工作完成后立即更新主队列上的UI。新API如下所示:

DispatchQueue.global(attributes: [.qosDefault]).async { 
    // Background thread
    DispatchQueue.main.async(execute: { 
        // UI Updates
    })
}

队列现在在init上获取属性。这是一个Swift选项集,可以包括队列选项,如串行和并发,内存和活动管理选项以及服务质量(.default,.userInteractive,.userInitiated,.utility和.background)。

新变化:

  • DISPATCH_QUEUE_PRIORITY_HIGH: - > .userInitiated
  • DISPATCH_QUEUE_PRIORITY_DEFAULT: - > .DEFAULT
  • DISPATCH_QUEUE_PRIORITY_LOW: - > .utility
  • DISPATCH_QUEUE_PRIORITY_BACKGROUND: - >装置技术领域

如果您想了解更多信息,这是一个很好的谈话https://developer.apple.com/videos/play/wwdc2016/720/