獲取 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