iOS面試題:NSOperation 與 GCD 的主要區(qū)別?

  • 1. GCD 的核心是 C 語言寫的系統(tǒng)服務(wù),執(zhí)行和操作簡單高效,因此 NSOperation 底層也通過 GCD 實(shí)現(xiàn),換個說法就是 NSOperation 是對 GCD 更高層次的抽象,這是他們之間最本質(zhì)的區(qū)別。因此如果希望自定義任務(wù),建議使用 NSOperation;

  • 2. 依賴關(guān)系,NSOperation 可以設(shè)置兩個 NSOperation 之間的依賴,第二個任務(wù)依賴于第一個任務(wù)完成執(zhí)行,GCD 無法設(shè)置依賴關(guān)系,不過可以通過dispatch_barrier_async來實(shí)現(xiàn)這種效果;

  • 3. KVO(鍵值對觀察),NSOperation 和容易判斷 Operation 當(dāng)前的狀態(tài)(是否執(zhí)行,是否取消),對此 GCD 無法通過 KVO 進(jìn)行判斷;

  • 4. 優(yōu)先級,NSOperation 可以設(shè)置自身的優(yōu)先級,但是優(yōu)先級高的不一定先執(zhí)行,GCD 只能設(shè)置隊列的優(yōu)先級,無法在執(zhí)行的 block 設(shè)置優(yōu)先級;

  • 5. 繼承,NSOperation 是一個抽象類,實(shí)際開發(fā)中常用的兩個類是 NSInvocationOperation 和 NSBlockOperation ,同樣我們可以自定義 NSOperation,GCD 執(zhí)行任務(wù)可以自由組裝,沒有繼承那么高的代碼復(fù)用度;

  • 6. 效率,直接使用 GCD 效率確實(shí)會更高效,NSOperation 會多一點(diǎn)開銷,但是通過 NSOperation 可以獲得依賴,優(yōu)先級,繼承,鍵值對觀察這些優(yōu)勢,相對于多的那么一點(diǎn)開銷確實(shí)很劃算,魚和熊掌不可得兼,取舍在于開發(fā)者自己;


更多:iOS面試題合集

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

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

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