NSOperationQueue против GCD - PullRequest
       29

NSOperationQueue против GCD

11 голосов
/ 07 ноября 2011

В каких случаях вы бы предпочли использовать NSOperationQueue вместо GCD?

Исходя из моего ограниченного опыта работы с этими двумя, я понимаю, что с NSOperationQueue вы в основном можете контролировать количество одновременных операций.

С GCD вы не можете сделать это, посколькувы используете очередь.За исключением того, что вы можете каким-то образом смоделировать это с помощью многоядерного процессора, хотя, тем не менее, я думаю, что нет никакого способа контролировать это.

Ответы [ 3 ]

19 голосов
/ 07 ноября 2011

NSOperationQueue построен на GCD начиная с iOS 4. Используйте простейший API для решения поставленной задачи. Измерьте, если это проблема с производительностью, а затем повторите оценку, если необходимо. dispatch_async - более низкий уровень, обычно C-типаматериал (но не ограничиваясь), и хорош для одноразовых и последовательных сделок типа.NSOperationQueues - это вещи более высокого уровня, Objective-C, и они хороши, если вы добавляете много операций в различных точках своего кода и / или вам необходимо управлять параллелизмом, приоритетами и зависимостями.

7 голосов
/ 07 ноября 2011

Я предполагаю, что под NSPriorityQueue вы подразумеваете NSOperationQueue? Основными причинами использования NSOperationQueue поверх GCD являются дополнительные возможности:

  • Поддержка старых версий ОС
  • КВО по эксплуатационным свойствам
  • 1008 * Зависимость *
  • Ограничение ширины очереди (хотя вы можете сделать это довольно легко в GCD с dispatch_semaphore_t)

В противном случае, если вы не работаете с API, который принимает NSOperationQueue, GCD, вероятно, будет лучшей ставкой

0 голосов
/ 01 сентября 2013

На более высоком уровне я обнаружил, что NSOperationQueue более элегантен для управления задачами / операциями, а не для их обработки на более низком уровне с помощью GCD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...