在 OperationQueue 中執行任務
你可以將 OperationQueue
視為一系列等待執行的任務。與 GCD 中的排程佇列不同,操作佇列不是 FIFO(先進先出)。相反,只要有足夠的系統資源允許,它們就會在準備好執行任務後立即執行。
得到主要的 OperationQueue
:
Version >= 3.0
let mainQueue = OperationQueue.main
建立自定義 OperationQueue
:
Version >= 3.0
let queue = OperationQueue()
queue.name = "My Queue"
queue.qualityOfService = .default
服務質量指定了工作的重要性,或者使用者可能會指望該任務的即時結果。
新增 Operation
到 OperationQueue
:
Version >= 3.0
// An instance of some Operation subclass
let operation = BlockOperation {
// perform task here
}
queue.addOperation(operation)
新增塊到 OperationQueue
:
Version >= 3.0
myQueue.addOperation {
// some task
}
新增多個 Operation
s 到 OperationQueue
:
Version >= 3.0
let operations = [Operation]()
// Fill array with Operations
myQueue.addOperation(operations)
調整佇列中可同時執行的 Operation
s 數量:
myQueue.maxConcurrentOperationCount = 3 // 3 operations may execute at once
// Sets number of concurrent operations based on current system conditions
myQueue.maxConcurrentOperationCount = NSOperationQueueDefaultMaxConcurrentOperationCount
掛起佇列將阻止它開始執行任何現有的,未啟動的操作或新增到佇列的任何新操作。恢復此佇列的方法是將 isSuspended
設定回 false
:
Version >= 3.0
myQueue.isSuspended = true
// Re-enable execution
myQueue.isSuspended = false
暫停 OperationQueue
不會停止或取消已經執行的操作。應該只嘗試掛起你建立的佇列,而不是全域性佇列或主佇列。