Dependency可以實現(xiàn)
-
Operation等待先決條件達到再運行 -
Operation從其它Opration拿到值
而且Operation的多任務依賴會比GCD的代碼更簡潔明了,以及避免循環(huán)引用的問題
添加依賴
給線程添加依賴非常得方便,只要設置Operation的dependent屬性即可
假設要從網(wǎng)上下載一張圖并且揭秘然后添加濾鏡
let networkOp = NetworkOperation()
let decryptOp = DecryptOperation()
let filterOp = FilterOperation()
decryptOp.addDependency(op: networkOp)
filterOp.addDependency(op: decryptOp)
如果要移除依賴的話
filterOp.removeDependency(op: decryptOp)
查看某個線程有哪些依賴
filterOp.dependencies
小心死鎖
如果Operation之間互相依賴,比如隊列A中的Operation1依賴Operation2, 而Operation2依賴Operation3,Operation3依賴Operation1, 這就會陷入互相等待的死鎖。
Operation之間傳值
比如要把在networkOp下載的圖片傳給decyptOp,那么在設置好依賴之后
decryptOp.addDependency(op: networkOp)
networkOp就會等decryptOp運行完成之后才開始運行了
所以只要在decryptOp的main中通過dependencies訪問networkOp即可。
override func main() {
let networkOp = dependencies.first as! newworkOp
newworkOp.downloadedImage
}
系列文章鏈接
- Swift多線程開發(fā) - 1. 概述
- Swift多線程開發(fā) - 2. GCD 隊列和線程
- Swift多線程開發(fā) - 3. DispatchGroup和Semaphore
- Swift多線程開發(fā) - 4. 多線程開發(fā)的問題
- Swift多線程開發(fā) - 5. Operations
- Swift多線程開發(fā) - 6. Operation 隊列
- Swift多線程開發(fā) - 7. Operation 異步隊列
- Swift多線程開發(fā) - 8. Operation依賴
- Swift多線程開發(fā) - 9. 取消Operation
- Swift多線程開發(fā) - 10. Thread Sanitizer