iOS開發-NSOperation與GCD區別


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

其實我們在通過NSOperation和GCD進行開發過程中,會發現兩者執行的方式有許多相似之處,NSOperation和GCD參照對比,NSOperationQueue和dispatch_queue參照對比,但是兩者之間還是有許多差別的,具體區別:

1.GCD的核心是C語言寫的系統服務,執行和操作簡單高效,因此NSOperation底層也通過GCD實現,換個說法就是NSOperation是對GCD更高層次的抽象,這是他們之間最本質的區別.因此如果希望自定義任務,建議使用NSOperation;

2.依賴關系,NSOperation可以設置兩個NSOperation之間的依賴,第二個任務依賴於第一個任務完成執行,GCD無法設置依賴關系,不過可以通過dispatch_barrier_async來實現這種效果;

3.KVO(鍵值對觀察),NSOperation和容易判斷Operation當前的狀態(是否執行,是否取消),對此GCD無法通過KVO進行判斷;

4.優先級,NSOperation可以設置自身的優先級,但是優先級高的不一定先執行,GCD只能設置隊列的優先級,無法在執行的block設置優先級;

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

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

關於主要的區別都已經總結,根據實際開發中來說,GCD使用情況較多,簡單高效,從變成原則上來看,應該是使用高層次的抽象,避免使用低層次的抽象,那么無疑我們應該選擇NSOperation,因為復雜的任務可以自己通過NSOperation實現,日常還是GCD的天下,畢竟GCD有更高的並發和執行能力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM