最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Multi-Thread handling – Operation

XAMPP下载 admin 1051浏览 0评论
 在前一篇提到了用 GCD 來增加執行緒(threads)以改進 App 的執行效能,本篇來聊 iOS 中另一種操作多執行緒的方法: Operation。

Operation 相比 GCD 而言,Operation 提供了更多對 thread 的操作,像是 dependency、observable、Pause、Cancel 及 Resume。

在使用 Operation 時,因 Operation 本身是 abstract class,要使用時除了繼承之外,也可以使用BlockOperation 來進行多工操作。

本篇的 demo 功能跟前一篇一樣,只不過多了一個停止的按鈕。接下來就用此 demo 來介紹 Operation 的功能。
首先先初始化用來存放 Operations 的 Queue:

var queue = OperationQueue()
接下來初始化要放入 Queue 中的 Operation,並將之加入到之前宣告好的 Queue 中。在此 demo 中每個 Operation 要做的事情跟前一篇一樣是透過網路下載圖片:

let operation2 = BlockOperation(block: {
let img2 = self.downloadImageWithURL(url: self.imageURLs[1])
})

queue.addOperation(operation2)
開頭介紹時有提到 Operation 相比 GCD 提供了更多的功能,其中之一就是相依性(dependency)。若想讓某兩個 Operation 有相依性,其方法如下:

operation2.addDependency(operation1)
加了 dependency 之後,operation2 會等到 operation1 結束之後才會執行。

Cancel Operation 的方式也很簡單,可單獨取消個別 Operation,也可以一次取消全部。

queue.cancelAllOperations()
or
operation1.cancel()
在更新 UIKit compoments 時亦跟 GCD 一樣需回到 main thread 才能進行更新:

let operation2 = BlockOperation(block: {

OperationQueue.main.addOperation(
self.imageView2.image = img2
})
})

在開始執行此 demo 後馬上取消會發現只會出現圖一跟圖四,其原因是在圖三會等圖二,圖二會等圖一,而處理圖四的 Operation 沒有增加相依性。

转载请注明:XAMPP中文组官网 » Multi-Thread handling – Operation

您必须 登录 才能发表评论!