Подтвердить что ты не робот

Очередь операций против очереди отправки для приложения iOS

  • В чем разница между очередью операций и очередью отправки?
  • При каких обстоятельствах будет более целесообразным использовать каждый?
4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Для подробного объяснения обратитесь к этому вопросу: /info/16824/nsoperation-vs-grand-central-dispatch