2011-08-16 92 views
33
  1. Operation Queue和Dispatch Queue之間有什麼區別?
  2. 在什麼情況下使用它們會更合適?
+0

類似的問題http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe

回答

42

NSOperationQueue早於Grand Central Dispatch,在iOS上它不使用GCD來執行操作(這在Mac OS X上是不同的)。它使用定期的後臺線程,比GCD調度隊列有更多的開銷。

另一方面,NSOperationQueue可以讓您更好地控制操作的執行方式。您可以定義各個操作之間的依賴關係,例如,對於普通的GCD隊列而言這是不可能的。也可以取消已在NSOperationQueue中排隊的操作(只要操作支持它)。當你將一個塊排入GCD調度隊列時,它肯定會在某個時刻執行。

總結起來,NSOperationQueue可能更適合長時間運行的操作,可能需要取消或具有複雜的依賴關係。對於應該具有最小性能和內存開銷的短任務,GCD調度隊列更好。

編輯:看來文檔中關於NSOperationQueue已經過時,它確實在iOS 4.0及更高版本使用GCD。

+9

[NSOperationQueue在iOS 4.0和更高版本是基於GCD。](https://開頭devforums.apple.com/message/352780#352780) –

10
  • 身高GCD這裏的任務並不多複雜,需要優化CPU性能。
  • 首選NSOperationQueue,其任務非常複雜,需要取消或暫停塊和依賴關係管理

GCD是一種輕量級的方式來表示要同時執行的工作單元。你不安排這些工作單位;系統會爲您安排時間安排。在塊之間添加依賴關係可能會讓人頭疼。作爲開發人員,取消或暫停塊可爲您創造額外的工作量!

與GCD相比,NSOperation和NSOperationQueue增加了一些額外開銷,但是您可以在各種操作之間添加依賴關係。您可以重新使用操作,取消或暫停操作。 NSOperation與Key-Value Observation(KVO)兼容;例如,您可以通過偵聽NSNotificationCenter來啓動NSOperation。

NSOperation和NSOperationQueue是在GDC之上製作的高級API,以面向對象的方式實現併發。

For detailed explanation, refer this question: https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch