- Operation Queue和Dispatch Queue之間有什麼區別?
- 在什麼情況下使用它們會更合適?
回答
NSOperationQueue
早於Grand Central Dispatch,在iOS上它不使用GCD來執行操作(這在Mac OS X上是不同的)。它使用定期的後臺線程,比GCD調度隊列有更多的開銷。
另一方面,NSOperationQueue
可以讓您更好地控制操作的執行方式。您可以定義各個操作之間的依賴關係,例如,對於普通的GCD隊列而言這是不可能的。也可以取消已在NSOperationQueue
中排隊的操作(只要操作支持它)。當你將一個塊排入GCD調度隊列時,它肯定會在某個時刻執行。
總結起來,NSOperationQueue
可能更適合長時間運行的操作,可能需要取消或具有複雜的依賴關係。對於應該具有最小性能和內存開銷的短任務,GCD調度隊列更好。
編輯:看來文檔中關於NSOperationQueue
已經過時,它確實在iOS 4.0及更高版本使用GCD。
[NSOperationQueue在iOS 4.0和更高版本是基於GCD。](https://開頭devforums.apple.com/message/352780#352780) –
- 身高GCD這裏的任務並不多複雜,需要優化CPU性能。
- 首選NSOperationQueue,其任務非常複雜,需要取消或暫停塊和依賴關係管理。
GCD是一種輕量級的方式來表示要同時執行的工作單元。你不安排這些工作單位;系統會爲您安排時間安排。在塊之間添加依賴關係可能會讓人頭疼。作爲開發人員,取消或暫停塊可爲您創造額外的工作量!
與GCD相比,NSOperation和NSOperationQueue增加了一些額外開銷,但是您可以在各種操作之間添加依賴關係。您可以重新使用操作,取消或暫停操作。 NSOperation與Key-Value Observation(KVO)兼容;例如,您可以通過偵聽NSNotificationCenter來啓動NSOperation。
NSOperation和NSOperationQueue是在GDC之上製作的高級API,以面向對象的方式實現併發。
- 1. 調度隊列和排隊的NSOperation
- 2. java優先級隊列隊列適應
- 3. 關於使用同步調度隊列
- 4. 操作隊列cocos2d
- 5. 使用代理,操作和隊列
- 6. 的iOS:未發佈的調度隊列
- 7. 如何使用NSOperation和調度隊列
- 8. GCD中的調度屏障隊列(iOS)
- 9. 適用於Windows的消息隊列
- 10. 在iOS中調度併發隊列
- 11. 隊列https調用
- 12. 作業隊列和就緒隊列
- 13. 使用mod操作的隊列
- 14. 操作隊列中的跟蹤操作
- 15. 相當於GCD串行調度隊列
- 16. 操作<<在隊列
- 17. 動態隊列操作
- 18. 瞭解調度隊列
- 19. 相當於iOS 3.x中的GCD串行調度隊列
- 20. iPhone - GCD發送異步操作的串行調度隊列
- 21. 用多種方法調度隊列? iPhone
- 22. 使用調度隊列快速下載
- 23. 調度隊列如何工作
- 24. 調度隊列中的列表項
- 25. Alamofire和併發操作隊列
- 26. 讀取文件和操作隊列
- 27. DeadlineExceededException和DataStore /任務隊列操作
- 28. 實現函數隊列調度的2D隊列
- 29. 對於iOS NSOperationQueue,隊列何時會刪除操作塊?
- 30. 隊列長度
類似的問題http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe