Очередь операций против очереди отправки для приложения iOS - PullRequest
48 голосов
/ 16 августа 2011
  1. В чем различия между Очередью операций и Очередью отправки?
  2. При каких обстоятельствах будет более целесообразно использовать каждый из них?

Ответы [ 2 ]

54 голосов
/ 16 августа 2011

NSOperationQueue предшествует Grand Central Dispatch, и в iOS он не использует GCD для выполнения операций (это отличается в Mac OS X).Он использует обычные фоновые потоки, которые имеют немного больше накладных расходов, чем очереди отправки GCD.

С другой стороны, NSOperationQueue дает вам гораздо больший контроль над тем, как выполняются ваши операции.Например, вы можете определить зависимости между отдельными операциями, что невозможно с обычными очередями GCD.Также возможно отменить операции, которые были поставлены в очередь в NSOperationQueue (насколько операции поддерживают это).Когда вы ставите блок в очередь отправки GCD, он обязательно будет выполнен в какой-то момент.

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

EDIT : похоже, документация о NSOperationQueue устарела и делает используйте GCD на iOS 4.0 и более поздних версиях.

20 голосов
/ 09 января 2015
  • Предпочитать GCD, если задача не слишком сложна и требуется оптимальная производительность ЦП .
  • Предпочитать NSOperationQueue, если задача сложная и требует отмены или приостановки блока иуправление зависимостями .

GCD - это упрощенный способ представления единиц работы, которые будут выполняться одновременно.Вы не планируете эти единицы работы;система позаботится о планировании для вас.Добавление зависимости между блоками может быть головной болью.Отмена или приостановка блока создает дополнительную работу для вас как для разработчика!

NSOperation и NSOperationQueue добавляют немного дополнительных издержек по сравнению с GCD, но вы можете добавить зависимость между различными операциями.Вы можете повторно использовать операции, отменить или приостановить их.NSOperation совместимо с Key-Value Observation (KVO);например, вы можете запустить NSOperation, прослушивая NSNotificationCenter.

NSOperation и NSOperationQueue - это API-интерфейсы с более высоким рычагом, созданные поверх самого GDC, для достижения параллелизма объектно-ориентированным способом.

Для подробного объяснения, обратитесь к этому вопросу: https://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch

...