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