日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

NSOprationQueue 与 GCD 的区别与选用

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

GCD 技術是一個輕量的,底層實現隱藏的神奇技術,我們能夠通過GCD和block輕松實現多線程編程,有時候,GCD相比其他系統提供的多線程方法更加有效,當然,有時候GCD不是最佳選擇,另一個多線程編程的技術 NSOprationQueue 讓我們能夠將后臺線程以隊列方式依序執行,并提供更多操作的入口,這和 GCD 的實現有些類似。

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


那這兩者直接有什么區別呢?

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

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

    轉載于:https://www.cnblogs.com/sunjianfei/p/5959103.html

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。