start
1. 并發(fā)異步 必須override start方法,并且在start方法里面配置執(zhí)行環(huán)境。注意不要調(diào)用super方法。在調(diào)用start方法時,一定要先檢查operation是否取消了(isCancelled),然后設(shè)置executing和finished值,并手動發(fā)出kvo。也可以手動調(diào)用start方法執(zhí)行,但是已經(jīng)加入到operationQueue中的operation不能再手動調(diào)用start執(zhí)行。
Main
1. 并發(fā)異步執(zhí)行Operation時不需要override Main方法,但是,你可以在start方法里手動調(diào)用Main方法。注意:該方法不要調(diào)用super父類方法。
isCancelled
是否已經(jīng)取消標(biāo)示,用來在anytime時候檢查operation狀態(tài),然后設(shè)置excecuting或者finished狀態(tài)。特別需要在start方法開始檢查該狀態(tài),然后配置excecuting或者finished狀態(tài)??梢詏verride
cancel
當(dāng)operation在線程池中時,并且沒有開始執(zhí)行,調(diào)用cancel也線程池會把該operation清除出去。當(dāng)operation沒有在線程池中時,并且還未開始執(zhí)行,調(diào)用cancel方法則會把isFinished狀態(tài)設(shè)置為YES,已經(jīng)執(zhí)行的operation和已經(jīng)finished的operation則沒有作用。
isExecuting和isFinished
并發(fā)執(zhí)行時,必須override。 正在執(zhí)行和是否完成標(biāo)示。注意:改變狀態(tài)時必須手動發(fā)出kvo。
isConcurrent
并發(fā)執(zhí)行標(biāo)示。并發(fā)執(zhí)行時需要override,reture YES。已被isAsynchronous
替代
isAsynchronous
異步執(zhí)行標(biāo)示,異步執(zhí)行時需要override
isReady
是否已經(jīng)準(zhǔn)備好狀態(tài),手動管理ready狀態(tài)時,需要override該方法,并自己管理isReady狀態(tài)。注意必須在依賴super父類方法得到的結(jié)果的前提下配置該狀態(tài),特別在添加了依賴operation的情況下配置isReady才顯得合理。
addDependency/removeDependency
添加和移除依賴,所謂依賴就是:比如A依賴B,A想要開始執(zhí)行,必須等B執(zhí)行結(jié)束finished。
completionBlock
完成block,當(dāng)finished狀態(tài)設(shè)置為YES的情況下,該block才執(zhí)行。operation在完成task或者被取消的2種情況下,finished會被設(shè)置為YES。 換句話說:該block執(zhí)行的時候,operation不一定真正的完成,有可能被取消掉了。
NSBlockOperation
在block中開啟新的線程執(zhí)行任務(wù),NSBlockOperation是不會等待該線程異步回調(diào)結(jié)束的。只要block執(zhí)行完,NSBlockOperation就finished了。