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