Когда использовать NSOperation
NSOperation
API отлично подходит для инкапсулирования хорошо определенные блоки функциональности. Например, вы можете использовать подкласс NSOperation
для инкапсуляции последовательности входа в приложение.
Управление зависимостями является глазурью на торте. Операция может иметь зависимости от других операций, и это очень мощная функция, которой не хватает в Grand Central Dispatch. Если вам нужно выполнить несколько задач в определенном порядке, то операции являются хорошим решением.
Вы можете перейти за борт с операциями, если вы создаете десятки операций за короткий промежуток времени. Это может привести к проблемам с производительностью из-за накладных расходов, присущих NSOperation API
.
Когда использовать Grand Central Dispatch
Grand Central Dispatch
идеально подходит, если вам просто нужно направить блок кода в последовательную или параллельную очередь.
Если вы не хотите испытывать затруднения при создании NSOperation subclass
для тривиальной задачи, то Grand Central Dispatch
- отличная альтернатива. Другим преимуществом Grand Central Dispatch
является то, что вы можете сохранить связанный код вместе. Взгляните на следующий пример.
let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
// Process Response
...
dispatch_async(dispatch_get_main_queue(), {() -> Void in
// Update User Interface
...
})
})
В обработчик завершения задания данных, мы обрабатываем ответ и обновить пользовательский интерфейс, направив замыкание (или блока) к основной очереди. Это необходимо, потому что мы не знаем, в какой поток выполняется обработчик завершения, и это скорее всего фоновый поток.
Цитируется дословно this source
Проверить это ссылки - http://stackoverflow.com/questions/7651551/why-should-i-choose-gcd-over-nsoperation-and-blocks-for -high-level-applications/7654476 # 7654476 и http://stackoverflow.com/questions/10373331/nsoperation-vs-grand-central-dispatch – Rajat