建立高階操作
Foundation 框架提供了 Operation
型別,它表示一個高階物件,它封裝了可以在佇列上執行的一部分工作。佇列不僅協調這些操作的效能,而且還可以在操作之間建立依賴關係,建立可取消的操作,約束操作佇列使用的併發度等。
Operation
s 在所有依賴項完成執行後即可執行。然後 isReady
屬性變為 true
。
建立一個簡單的非併發 Operation
子類:
Version >= 3.0
class MyOperation: Operation {
init(<parameters>) {
// Do any setup work here
}
override func main() {
// Perform the task
}
}
Version <= 2.3
class MyOperation: NSOperation {
init(<parameters>) {
// Do any setup work here
}
override func main() {
// Perform the task
}
}
新增操作到 OperationQueue
:
Version >= 1.0
myQueue.addOperation(operation)
這將在佇列上同時執行操作。
管理 Operation
的依賴關係
依賴關係定義了在認為 Operation
準備好執行之前必須在佇列上執行的其他 Operation
。
Version >= 1.0
operation2.addDependency(operation1)
operation2.removeDependency(operation1)
執行沒有佇列的 Operation
:
Version >= 1.0
operation.start()
依賴關係將被忽略。如果這是併發操作,則如果其 start
方法將工作解除安裝到後臺佇列,則該任務仍可以同時執行。
併發運營
如果 Operation
要執行的任務本身是非同步的(例如,URLSession
資料任務),則應將 Operation
實現為併發操作。在這種情況下,你的 isAsynchronous
實現應該返回 true
,你通常會有 start
方法執行一些設定,然後呼叫它實際執行任務的 main
方法。
當實現非同步 Operation
開始時,你必須實現 isExecuting
,isFinished
方法和 KVO。因此,當執行開始時,isExecuting
屬性變為 true
。當 Operation
完成任務時,isExecuting
設定為 false
,isFinished
設定為 true
。如果取消操作 isCancelled
和 isFinished
都改為 true
。所有這些屬性都是鍵值可觀察的。
取消 Operation
呼叫 cancel
只需將 isCancelled
屬性更改為 true
。要回復你自己的 Operation
子類中的取消,你應該至少定期在 main
中檢查 isCancelled
的值並做出適當的響應。
Version >= 1.0
operation.cancel()