關(guān)于 NSOperation 其他細(xì)節(jié)問題

dependencies:

我們可以在 operation 間添加依賴關(guān)系,在某個 operation 所依賴的 operations 完成之前,其一直處于未就緒狀態(tài)(isReady?為 NO)。

需要注意的是,依賴關(guān)系是 operation 自身的狀態(tài),也就是說有依賴關(guān)系的 operations 可以處在不同的 NSOperationQueue 中。

isReady:

isReady?默認(rèn)實現(xiàn)主要處理 operation 間的依賴關(guān)系,當(dāng)我們自定義該方法時需要考慮?super?的值,如 AFURLConnectionOperation中關(guān)于?isReady?的實現(xiàn):

qualityOfService:

用于表示 operation 在獲取系統(tǒng)資源時的優(yōu)先級,默認(rèn)值:NSQualityOfServiceBackground,我們可以根據(jù)需要給 operation 賦不同的優(yōu)化級,如最高優(yōu)化級:NSQualityOfServiceUserInteractive。

queuePriority:

用于設(shè)置 operation 在 operation queue 中的相對優(yōu)化級,同一 queue 中優(yōu)化級高的 operation(isReady?為 YES) 會被優(yōu)先執(zhí)行。需要注意區(qū)分qualityOfService(在系統(tǒng)層面,operation 與其他線程獲取資源的優(yōu)先級)與queuePriority(同一 queue 中 operation 間執(zhí)行的優(yōu)化級)的區(qū)別。

同時,需要注意dependencies(嚴(yán)格控制執(zhí)行順序)與queuePriority(queue 內(nèi)部相對優(yōu)先級)的區(qū)別。

NSOperation Queue

NSOperation Queue 用于管理、執(zhí)行 NSOperation,無論其中的 operation 是并行還是串行,queue 都會在子線程(借用 GCD)中執(zhí)行 operation。

從上小節(jié)我們知道,實現(xiàn)異步 operation 比同步 operation 要復(fù)雜許多,因此如果打算將 operation 加入 queue 中,則完全可以將 operation 實現(xiàn)為同步方式。

對于 queue 中已就緒的 operation,queue 會選擇?queuePriority?值最大的 operation 執(zhí)行。

關(guān)于 NSOperation Queue 有兩點需要強(qiáng)調(diào):

cancelAllOperations:用于取消隊列中的 operations,對 queue 中所有 operations 調(diào)用?cancel方法。(對 operation 調(diào)用?cancel?方法后的效果完全由 operation 自己決定。cancel?唯一能影響的就是清除 operation 的依賴關(guān)系,使其立即可以被執(zhí)行)。此時 queue 并不會 remove 其中的 operations,remove 操作僅發(fā)生在 operation 完成時。

suspended:將該屬性置為 YES,會阻止 queue 執(zhí)行新的 operation,但已經(jīng)在執(zhí)行中的 operation 不受此影響。

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

相關(guān)閱讀更多精彩內(nèi)容

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