Swift多线程开发 - 8. Operation依赖
2020-04-04 本文已影响0人
JaiUnChat
Dependency可以实现
-
Operation
等待先决条件达到再运行 -
Operation
从其它Opration
拿到值
而且Operation
的多任务依赖会比GCD的代码更简洁明了,以及避免循环引用的问题
添加依赖
给线程添加依赖非常得方便,只要设置Operation
的dependent
属性即可
假设要从网上下载一张图并且揭秘然后添加滤镜
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
}
系列文章链接