日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSOprationQueue 与 GCD 的区别与选用

發(fā)布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSOprationQueue 与 GCD 的区别与选用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GCD 技術(shù)是一個輕量的,底層實現(xiàn)隱藏的神奇技術(shù),我們能夠通過GCD和block輕松實現(xiàn)多線程編程,有時候,GCD相比其他系統(tǒng)提供的多線程方法更加有效,當(dāng)然,有時候GCD不是最佳選擇,另一個多線程編程的技術(shù) NSOprationQueue 讓我們能夠?qū)⒑笈_線程以隊列方式依序執(zhí)行,并提供更多操作的入口,這和 GCD 的實現(xiàn)有些類似。

這種類似不是一個巧合,在早期,MacOX 與 iOS 的程序都普遍采用Operation Queue來進行編寫后臺線程代碼,而之后出現(xiàn)的GCD技術(shù)大體是依照前者的原則來實現(xiàn)的,而隨著GCD的普及,在iOS 4 與 MacOS X 10.6以后,Operation Queue的底層實現(xiàn)都是用GCD來實現(xiàn)的。


那這兩者直接有什么區(qū)別呢?

  • GCD是底層的C語言構(gòu)成的API,而NSOperationQueue及相關(guān)對象是Objc的對象。在GCD中,在隊列中執(zhí)行的是由block構(gòu)成的任務(wù),這是一個輕量級的數(shù)據(jù)結(jié)構(gòu);而Operation作為一個對象,為我們提供了更多的選擇;
  • 在NSOperationQueue中,我們可以隨時取消已經(jīng)設(shè)定要準(zhǔn)備執(zhí)行的任務(wù)(當(dāng)然,已經(jīng)開始的任務(wù)就無法阻止了),而GCD沒法停止已經(jīng)加入queue的block(其實是有的,但需要許多復(fù)雜的代碼);
  • NSOperation能夠方便地設(shè)置依賴關(guān)系,我們可以讓一個Operation依賴于另一個Operation,這樣的話盡管兩個Operation處于同一個并行隊列中,但前者會直到后者執(zhí)行完畢后再執(zhí)行;
  • 我們能將KVO應(yīng)用在NSOperation中,可以監(jiān)聽一個Operation是否完成或取消,這樣子能比GCD更加有效地掌控我們執(zhí)行的后臺任務(wù);
  • 在NSOperation中,我們能夠設(shè)置NSOperation的priority優(yōu)先級,能夠使同一個并行隊列中的任務(wù)區(qū)分先后地執(zhí)行,而在GCD中,我們只能區(qū)分不同任務(wù)隊列的優(yōu)先級,如果要區(qū)分block任務(wù)的優(yōu)先級,也需要大量的復(fù)雜代碼;
  • 我們能夠?qū)SOperation進行繼承,在這之上添加成員變量與成員方法,提高整個代碼的復(fù)用度,這比簡單地將block任務(wù)排入執(zhí)行隊列更有自由度,能夠在其之上添加更多自定制的功能。

  • 總的來說,Operation queue 提供了更多你在編寫多線程程序時需要的功能,并隱藏了許多線程調(diào)度,線程取消與線程優(yōu)先級的復(fù)雜代碼,為我們提供簡單的API入口。從編程原則來說,一般 我們需要盡可能的使用高等級、封裝完美的API,在必須時才使用底層API。但是我認為當(dāng)我們的需求能夠以更簡單的底層代碼完成的時候,簡潔的GCD或許 是個更好的選擇,而Operation queue 為我們提供能更多的選擇。

    轉(zhuǎn)載于:https://www.cnblogs.com/sunjianfei/p/5959103.html

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的NSOprationQueue 与 GCD 的区别与选用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。