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.