1. Operation 設置依賴關係 先看看如何設置operation的依賴關係。 啥叫依賴關係?有啥用啊?打個比方咱們要做一個聽音樂的付費App項目,需要經過登陸、付費、下載、播放四個步驟。其實一看就明白,這四個操作是有先後順序的,但假如所有的操作都是多線程,咱們怎麼控制順序?通過設置“優先順序” ...
1. Operation 設置依賴關係
先看看如何設置operation的依賴關係。
啥叫依賴關係?有啥用啊?
打個比方咱們要做一個聽音樂的付費App項目,需要經過登陸、付費、下載、播放四個步驟。其實一看就明白,這四個操作是有先後順序的,但假如所有的操作都是多線程,咱們怎麼控制順序?
通過設置“優先順序”?NO!優先順序沒有辦法乾這個事情。(相當於操作系統中的同步)
我們可以通過設置依賴關係,建立起先後的順序。只有當一個 operation 所依賴的所有 operation 都執行完成時,這個 operation 才能開始執行。
並且,operation是可以跨隊列建立依賴關係的噢!
需要小小註意的是,要先將operation的依賴關係建立好之後再添加到隊列中。
代碼很簡單,請看:
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 fileprivate func startDepencyDemo() { 2 operationQueue.maxConcurrentOperationCount = 4 3 self.activityIndicator.startAnimating() 4 guard let url = URL(string: "https://placebeard.it/355/140") else {return } 5 let op1 = convenienceOperation(setImageView: imageView1, withURL: url) 6 let op2 = convenienceOperation(setImageView: imageView2, withURL: url) 7 op2.addDependency(op1) 8 let op3 = convenienceOperation(setImageView: imageView3, withURL: url) 9 op3.addDependency(op2) 10 let op4 = convenienceOperation(setImageView: imageView4, withURL: url) 11 op4.addDependency(op3) 12 13 DispatchQueue.global().async { 14 [weak self] in 15 self?.operationQueue.addOperations([op1,op2,op3,op4], waitUntilFinished: true) 16 DispatchQueue.main.async { 17 self?.activityIndicator.stopAnimating() 18 } 19 } 20 21 }View Code