国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS開發(fā)-NSOperation與GCD區(qū)別

2019-11-06 09:45:03
字體:
供稿:網(wǎng)友

Mac OS X 10.6及iOS4.0之后導(dǎo)入了可以使全體線程更高效運(yùn)行,并且使并行處理應(yīng)用更易開發(fā)的架構(gòu),GCD(Grand Central  Dispatch),同時(shí)引入的還有Run Loop,線程(包括Cocoa和POSIX)和Operation。GCD擁有非常輕量級的工作單元和并發(fā)方式,并且由系統(tǒng)決定其最佳調(diào)度方式。這個(gè)時(shí)候出現(xiàn)了一個(gè)問題,NSOperation如何處理呢?

其實(shí)我們在通過NSOperation和GCD進(jìn)行開發(fā)過程中,會發(fā)現(xiàn)兩者執(zhí)行的方式有許多相似之處,NSOperation和GCD參照對比,NSOperationQueue和dispatch_queue參照對比,但是兩者之間還是有許多差別的,具體區(qū)別:

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

2.依賴關(guān)系,NSOperation可以設(shè)置兩個(gè)NSOperation之間的依賴,第二個(gè)任務(wù)依賴于第一個(gè)任務(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è)置隊(duì)列的優(yōu)先級,無法在執(zhí)行的block設(shè)置優(yōu)先級;

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

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

關(guān)于主要的區(qū)別都已經(jīng)總結(jié),根據(jù)實(shí)際開發(fā)中來說,GCD使用情況較多,簡單高效,從變成原則上來看,應(yīng)該是使用高層次的抽象,避免使用低層次的抽象,那么無疑我們應(yīng)該選擇NSOperation,因?yàn)閺?fù)雜的任務(wù)可以自己通過NSOperation實(shí)現(xiàn),日常還是GCD的天下,畢竟GCD有更高的并發(fā)和執(zhí)行能力。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 比如县| 遵义县| 安丘市| 威宁| 巍山| 云和县| 博乐市| 合山市| 嘉义市| 司法| 观塘区| 新宁县| 高雄市| 永平县| 雅安市| 乐昌市| 厦门市| 淮阳县| 东台市| 甘孜| 丹巴县| 泊头市| 宝丰县| 东乡族自治县| 荃湾区| 宣城市| 广汉市| 甘德县| 尖扎县| 英吉沙县| 黔江区| 沐川县| 凤冈县| 江门市| 资中县| 永嘉县| 张家界市| 双鸭山市| 龙胜| 巴楚县| 南宫市|