Swift 多線程開發(fā) - 5. Operations

從使用場景來說,Operation與GCD最大的區(qū)別在于__ 面向?qū)ο蟮腛peration可以很好的復(fù)用代碼__。
所以如果你的多線程開發(fā)的代碼是只用執(zhí)行一次就結(jié)束了的話還是用GCD比較方便快捷

Operation States

  • isReady。這個(gè)狀態(tài)表示Operation實(shí)例初始化成功,可以接活兒了。
  • isExecuting。這個(gè)狀態(tài)表示正在運(yùn)行,發(fā)生在調(diào)用start()方法之后
  • isCanceled。如果cancel()方法被調(diào)用,那么Operation實(shí)例就會(huì)切換到這個(gè)狀態(tài)。
  • isFinished。即正常運(yùn)行結(jié)束。
    這個(gè)只讀屬性除了調(diào)用start()cancel()可以被我們主動(dòng)影響外,其它都是由底層直接控制。

Block Operation

執(zhí)行一個(gè)任務(wù)的話直接用閉包把任務(wù)寫在BlockOperation初始化方法中即可,

let operation = BlockOperation {
  print("測試任務(wù)輸出")
}

BlockOperation在默認(rèn)的全局并發(fā)隊(duì)列上執(zhí)行,而且可以像DispatchGroup一樣管理批量的任務(wù)。

BlockOperation如果想要串行多個(gè)任務(wù),需要設(shè)置依賴或者在DispatchQueue出來的串行隊(duì)列執(zhí)行。

多任務(wù)

下面的例子展示了BlockOperation的多任務(wù)創(chuàng)建

let numbers = [1, 2, 3, 4, 5]
let operation = BlockOperation()

for number in numbers {
  operation.addExecutionBlock {
    print("任務(wù)\(number)運(yùn)行在線程\(Thread.current)")
    sleep(1)
  }
}

operation.completionBlock = {
  print("任務(wù)全部完成")
}

// 測試運(yùn)行時(shí)間
let startTime = Date()

operation.start()

print("任務(wù)時(shí)間: \(Date().timeIntervalSince(startTime))")

輸出

任務(wù)1運(yùn)行在線程<NSThread: 0x60000077a200>{number = 1, name = main}
任務(wù)4運(yùn)行在線程<NSThread: 0x600000740340>{number = 3, name = (null)}
任務(wù)2運(yùn)行在線程<NSThread: 0x6000007668c0>{number = 7, name = (null)}
任務(wù)3運(yùn)行在線程<NSThread: 0x600000758080>{number = 5, name = (null)}
任務(wù)5運(yùn)行在線程<NSThread: 0x60000073d480>{number = 8, name = (null)}
任務(wù)全部完成
任務(wù)時(shí)間: 1.0200040340423584

上面12345的輸出順序是不能確定的,因?yàn)樗鼈儾l(fā)運(yùn)行在多個(gè)線程上。

自定義Operation子類

基礎(chǔ)用法

class ExampleOperation: Operation {
    override func main() { // start()方法會(huì)調(diào)用

    }
}

更多用法以及討論請(qǐng)看本系列下一篇



作者博客地址

系列文章鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容