建立高階操作

Foundation 框架提供了 Operation 型別,它表示一個高階物件,它封裝了可以在佇列上執行的一部分工作。佇列不僅協調這些操作的效能,而且還可以在操作之間建立依賴關係,建立可取消的操作,約束操作佇列使用的併發度等。

Operations 在所有依賴項完成執行後即可執行。然後 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 開始時,你必須實現 isExecutingisFinished 方法和 KVO。因此,當執行開始時,isExecuting 屬性變為 true。當 Operation 完成任務時,isExecuting 設定為 falseisFinished 設定為 true。如果取消操作 isCancelledisFinished 都改為 true。所有這些屬性都是鍵值可觀察的。

取消 Operation

呼叫 cancel 只需將 isCancelled 屬性更改為 true。要回復你自己的 Operation 子類中的取消,你應該至少定期在 main 中檢查 isCancelled 的值並做出適當的響應。

Version >= 1.0

operation.cancel()