2011-08-16 34 views
33
  1. Sự khác biệt giữa Hàng đợi vận hành và Hàng đợi công văn là gì?
  2. Trong trường hợp nào sẽ phù hợp hơn với mỗi trường hợp?
+0

câu hỏi tương tự http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central-dispatch – Joe

Trả lời

42

NSOperationQueue trước Grand Central Dispatch và trên iOS không sử dụng GCD để thực thi thao tác (điều này khác trên Mac OS X). Nó sử dụng các luồng nền thông thường có nhiều chi phí hơn một chút so với các hàng đợi GCD.

Mặt khác, NSOperationQueue cung cấp cho bạn nhiều quyền kiểm soát hơn đối với cách hoạt động của bạn được thực hiện. Bạn có thể xác định các phụ thuộc giữa các hoạt động riêng lẻ, ví dụ, không thể thực hiện với các hàng đợi GCD đơn giản. Nó cũng có thể hủy bỏ các hoạt động đã được enqueued trong một NSOperationQueue (theo như các hoạt động hỗ trợ nó). Khi bạn enqueue một khối trong một hàng đợi công văn GCD, nó chắc chắn sẽ được thực hiện tại một số điểm.

Để tổng hợp, NSOperationQueue có thể phù hợp hơn cho các hoạt động dài hạn có thể cần phải bị hủy hoặc có các phụ thuộc phức tạp. Hàng đợi công văn GCD tốt hơn cho các tác vụ ngắn nên có hiệu năng tối thiểu và chi phí bộ nhớ.

EDIT: Có vẻ như tài liệu về NSOperationQueue là lỗi thời và nó không sử dụng GCD trên iOS 4.0 và sau này.

+9

[NSOperationQueue trên iOS 4.0 và sau đó được dựa trên GCD.] (Https: // devforums.apple.com/message/352780#352780) –

10
  • thích GCD nơi nhiệm vụ không phải là nhiều phức tạp và hiệu suất CPU tối ưu là bắt buộc.
  • Ưu tiên NSOperationQueue nơi nhiệm vụ phức tạp và yêu cầu hủy hoặc tạm dừng quản lý chặn và phụ thuộc.

GCD là một cách nhẹ để đại diện cho các đơn vị công việc sẽ được thực thi đồng thời. Bạn không lên lịch cho các đơn vị công việc này; hệ thống sẽ quản lý lịch biểu cho bạn. Thêm sự phụ thuộc giữa các khối có thể là một nhức đầu. Việc hủy hoặc tạm dừng một khối tạo thêm công việc cho bạn với tư cách là nhà phát triển!

NSOperation and NSOperationQueue bổ sung thêm một chút chi phí so với GCD, nhưng bạn có thể thêm phụ thuộc vào các hoạt động khác nhau. Bạn có thể sử dụng lại các hoạt động, hủy hoặc đình chỉ chúng. NSOperation tương thích với Quan sát giá trị khóa (KVO); ví dụ, bạn có thể bắt đầu NSOperation bằng cách nghe NSNotificationCenter.

NSOperation and NSOperationQueue là API đòn bẩy cao hơn, được tạo trên đầu trang của chính GDC, để đạt được sự đồng thời trong một cách hướng đối tượng.

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

Các vấn đề liên quan