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
}
系列文章链接











网友评论