天天看點

GCD與NSOperationQueue的比較

       1.GCD是底層的C語言構成的API,而NSOperationQueue及相關對象是Objc的對象。在GCD中,在隊列中執行的是由block構成的任務,這是一個輕量級的資料結構;而Operation作為一個對象,為我們提供了更多的選擇;

       2.在NSOperationQueue中,我們可以随時取消已經設定要準備執行的任務(當然,已經開始的任務就無法阻止了),而GCD沒法停止已經加入queue的block(其實是有的,但需要許多複雜的代碼);

       3.NSOperation能夠友善地設定依賴關系,我們可以讓一個Operation依賴于另一個Operation,這樣的話盡管兩個Operation處于同一個并行隊列中,但前者會直到後者執行完畢後再執行;

       4.我們能将KVO應用在NSOperation中,可以監聽一個Operation是否完成或取消,這樣子能比GCD更加有效地掌控我們執行的背景任務;

       5.在NSOperation中,我們能夠設定NSOperation的priority優先級,能夠使同一個并行隊列中的任務區分先後地執行,而在GCD中,我們隻能區分不同任務隊列的優先級,如果要區分block任務的優先級,也需要大量的複雜代碼;

       6.我們能夠對NSOperation進行繼承,在這之上添加成員變量與成員方法,提高整個代碼的複用度,這比簡單地将block任務排入執行隊列更有自由度,能夠在其之上添加更多自定制的功能

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

繼續閱讀