获取 Grand Central Dispatch(GCD) 队列

Grand Central Dispatch 致力于调度队列的概念。调度队列按照传递的顺序执行你指定的任务。调度队列有三种类型:

  • Serial Dispatch Queues (也称为私有调度队列)按顺序一次执行一个任务。它们经常用于同步对资源的访问。
  • 并发调度队列 (也称为全局调度队列)同时执行一个或多个任务。
  • 主调度队列执行主线程任务。

要访问主队列:

Version = 3.0

let mainQueue = DispatchQueue.main

Version < 3.0

let mainQueue = dispatch_get_main_queue()

系统提供并发的全局调度队列(全局到你的应用程序),具有不同的优先级。你可以使用 Swift 3 中的 DispatchQueue 类访问这些队列:

Version = 3.0

let globalConcurrentQueue = DispatchQueue.global(qos: .default)

相当于

let globalConcurrentQueue = DispatchQueue.global()

Version < 3.0

let globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

在 iOS 8 或更高版本中,可能传递的服务质量值是 .userInteractive.userInitiated.default.utility.background。这些取代了 DISPATCH_QUEUE_PRIORITY_ 常数。

你还可以创建具有不同优先级的队列:

Version = 3.0

let myConcurrentQueue = DispatchQueue(label: "my-concurrent-queue", qos: .userInitiated, attributes: [.concurrent], autoreleaseFrequency: .workItem, target: nil)
let mySerialQueue = DispatchQueue(label: "my-serial-queue", qos: .background, attributes: [], autoreleaseFrequency: .workItem, target: nil)

Version < 3.0

let myConcurrentQueue = dispatch_queue_create("my-concurrent-queue", DISPATCH_QUEUE_CONCURRENT)
let mySerialQueue = dispatch_queue_create("my-serial-queue", DISPATCH_QUEUE_SERIAL)

在 Swift 3 中,使用此初始化程序创建的队列默认是串行的,并且传递 .workItem 以获得自动释放频率可确保为每个工作项创建和排空自动释放池。还有 .never,这意味着你将自己管理自己的自动释放池,或者 .inherit,它继承环境中的设置。在大多数情况下,除非极端定制,否则你可能不会使用 .never