Swift多线程开发 - 8. Operation依赖

Dependency可以实现

  • Operation等待先决条件达到再运行
  • Operation从其它Opration拿到值
    而且Operation的多任务依赖会比GCD的代码更简洁明了,以及避免循环引用的问题

添加依赖

给线程添加依赖非常得方便,只要设置Operationdependent属性即可
假设要从网上下载一张图并且揭秘然后添加滤镜

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依赖Operation3Operation3依赖Operation1, 这就会陷入互相等待的死锁。

Operation之间传值

比如要把在networkOp下载的图片传给decyptOp,那么在设置好依赖之后

decryptOp.addDependency(op: networkOp)

networkOp就会等decryptOp运行完成之后才开始运行了
所以只要在decryptOpmain中通过dependencies访问networkOp即可。

override func main() {

    let networkOp = dependencies.first as! newworkOp
    newworkOp.downloadedImage

}



作者博客地址

系列文章链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发中常用的几种多线程方案,简单做个小结,方便日后查阅。 NSThead GCD NSOperation &...
    木木小林酱阅读 338评论 0 1
  • iOS开发中常用的几种多线程方案,简单做个小结,方便日后查阅。 Pthreads NSThead GCD NSOp...
    acqiang阅读 443评论 0 4
  • 首先明确线程和进程的关系和区别: 一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多...
    kkj1996阅读 226评论 0 0
  • 主队列 细心的同学就会发现,每套多线程方案都会有一个主线程(当然啦,说的是iOS中,像 pthread 这种多系统...
    京北磊哥阅读 393评论 0 1
  • 现在iOS的多线程方案主要有以下这几种: GCD(Grand Central Dispatch):使用dispat...
    寒光冷剑阅读 1,743评论 0 2