這裏所提出的觀點是同一個,克里斯·漢森在他的文章「When to use NSOperation vs. GCD」規定:
直截了當的答案是所有的應用程序 發展的一般準則:
始終使用您可以使用最高級別抽象,並在測量顯示它們需要 時將其下降到較低級別的抽象。
在這種特殊情況下,這意味着在編寫Cocoa 應用程序時,通常應該使用NSOperation,而不是使用GCD直接使用 。不是因爲效率上的差異,而是因爲NSOperation在GCD的機制之上提供了更高層次的抽象。
總的來說,我同意這一點。NSOperation和NSOperationQueue爲依賴和GCD塊和隊列沒有的一兩個其他事物提供支持,它們抽象出實現併發操作的底層細節。如果你需要這個功能,NSOperation是一個非常好的方法。
但是,在使用兩者後,我發現自己用GCD塊和隊列替換了所有基於NSOperation的代碼。我這樣做的原因有兩個:在使用NSOperation進行頻繁操作時會產生很大的開銷,並且我相信在使用GCD塊時我的代碼更清晰且更具描述性。
第一個原因來自我的應用程序中的分析,其中發現NSOperation對象分配和釋放過程在處理小而頻繁的操作時花費了大量CPU資源,例如將OpenGL ES框架渲染到屏幕上。 GCD塊完全消除了這種開銷,從而顯着提高了性能。
第二個原因更主觀,但我相信我的代碼比NSOperations更清晰。快速捕獲塊允許的範圍及其內聯屬性可以減少代碼,因爲您不需要創建自定義NSOperation子類或捆綁要傳入操作的參數,在我看來,描述性代碼更多,因爲您可以將代碼放在隊列中並在其被觸發的位置運行。
同樣,它是一個偏好問題,但我發現自己更多地使用GCD,即使在其他更抽象的Cocoa應用程序中。
https:// cocoacasts。com /在nsoperation-and-grand-central-dispatch/ – Masih