Смысл здесь тот же, который Крис Хансон заявляет в своей статье " Когда использовать NSOperation vs. GCD ":
Простой ответ - это общее руководство для всех приложений
развитие:
Всегда используйте абстракцию самого высокого уровня, доступную вам, и отбросьте
вплоть до низкоуровневых абстракций, когда измерения показывают, что они
необходимо.
В данном конкретном случае это означает, что при написании Какао
приложения, вы, как правило, должны использовать NSOperation, а не
используя GCD напрямую. Не из-за разницы в эффективности, но
потому что NSOperation обеспечивает абстракцию более высокого уровня на вершине
механизмы ГКД.
В общем, я согласен с этим. NSOperation и NSOperationQueue обеспечивают поддержку зависимостей и одной или двух других вещей, которых нет у блоков и очередей GCD, и они абстрагируют детали более низкого уровня того, как реализуются параллельные операции. Если вам нужна эта функциональность, NSOperation - очень хороший способ.
Однако, после работы с обоими, я обнаружил, что заменяю весь мой код, основанный на NSOperation, на блоки и очереди GCD. Я сделал это по двум причинам: при использовании NSOperation для частых действий возникают значительные издержки, и я считаю, что мой код более понятен и более нагляден при использовании блоков GCD.
Первая причина возникла из-за профилирования в моих приложениях, когда я обнаружил, что процесс выделения и освобождения объекта NSOperation отнимает значительное количество ресурсов ЦП при работе с небольшими и частыми действиями, такими как отображение кадра OpenGL ES на экране. Блоки GCD полностью устранили эту нагрузку, что привело к значительному повышению производительности.
Вторая причина более субъективна, но я считаю, что мой код чище при использовании блоков, чем операции NSOperation. Быстрый захват области действия, допускаемый блоком, и их встроенная природа приводят к меньшему количеству кода, потому что вам не нужно создавать собственные подклассы NSOperation или связывать параметры для передачи в операцию, и, по моему мнению, более описательный код, потому что вы можете поместить код для запуска в очередь в том месте, где он запускается.
Опять же, это вопрос предпочтений, но я обнаружил, что использую GCD чаще, даже в более абстрактных приложениях Какао.