11

Trong trường hợp nào bạn muốn sử dụng NSOperationQueue qua GCD?NSOperationQueue vs GCD

Từ kinh nghiệm hạn chế của tôi về hai, tôi mang nó với NSOperationQueue về cơ bản bạn có quyền kiểm soát bao nhiêu hoạt động đồng thời có.

Với GCD, bạn không thể thực hiện việc này vì bạn đang sử dụng hàng đợi. Ngoại trừ bạn bằng cách nào đó có thể mô phỏng này với một bộ xử lý đa lõi, mặc dù vẫn còn tôi nghĩ rằng không có cách nào để kiểm soát nó.

+4

Bản sao có thể có của http://stackoverflow.com/questions/7146052/gcd-nsoperationqueue-or-create-a-thread-manually http://stackoverflow.com/questions/4344884/nsoperation-vs-grand-central -dispatch – 0x8badf00d

+0

có thể trùng lặp của [NSOperation vs Grand Central Dispatch] (http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch) – Monolo

Trả lời

19

NSOperationQueue được xây dựng trên GCD như của iOS 4. Sử dụng API đơn giản nhất cho công việc tại bàn tay.Measure nếu đó là vấn đề hiệu suất và sau đó đánh giá lại nếu cần. dispatch_async là cấp độ thấp hơn, thường là công cụ loại C (nhưng không giới hạn), và tốt cho các giao dịch loại một lần và theo tuần tự. NSOperationQueues là cấp cao hơn, Objective-C, và tốt nếu bạn đang thêm rất nhiều hoạt động tại các điểm khác nhau trong mã của bạn, và/hoặc cần quản lý sự đồng thời, các ưu tiên và phụ thuộc.

+0

là NSOperationQueue aa API cao hơn GCD? – xonegirlz

+1

NSOperation được xây dựng trên đầu trang của GCD. Một NSOperation là cồng kềnh và cần nhiều mã đĩa nồi hơi để thiết lập nó, nhưng nó có nhiều chức năng hơn. Bạn có thể tạo cùng một lớp con NSOperation trong các phần khác nhau của mã của bạn và đặt chúng vào hàng đợi và chạy nó. –

7

Tôi giả định bởi NSPriorityQueue bạn có nghĩa là NSOperationQueue? Những lý do chính để sử dụng NSOperationQueue qua GCD là nếu bạn cần thêm các tính năng của nó:

  • OS cũ hơn hỗ trợ
  • KVO về tài sản hoạt động
  • Dependencies
  • Queue chiều rộng hạn chế (mặc dù bạn có thể làm được điều này khá dễ dàng trong GCD với dispatch_semaphore_t)

Nếu không, trừ khi bạn đang làm việc với API có NSOperationQueue, GCD có thể là đặt cược tốt hơn

0

Ở cấp độ cao hơn, tôi thấy NSOperationQueue thanh lịch hơn để quản lý các tác vụ/hoạt động thay vì xử lý chúng ở cấp độ thấp hơn bằng cách sử dụng GCD.

+0

Bạn có thể thêm một số chi tiết khác về lý do bạn thấy NSOperationQueue thanh lịch hơn không? Không có điều đó, câu trả lời của bạn không hữu ích. – cmaster

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