NSOperationQueue против GCD

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

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

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

Ответ 1

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

Ответ 2

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

  • Поддержка старых ОС.
  • KVO по свойствам работы
  • Зависимости
  • Ограничение ширины очереди (хотя вы можете сделать это довольно легко в GCD с dispatch_semaphore_t)

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

Ответ 3

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