Я искал несколько конкретных сценариев, когда NSOperation на iPhone станет идеальным инструментом для использования в приложении. Насколько я понимаю, это оболочка для написания собственного threaded кода. Я не видел, чтобы какие-либо демонстрационные приложения Apple использовали его, и мне интересно, не упускаю ли я отличный инструмент вместо того, чтобы использовать NSThread.
Идеальным решением здесь было бы описание сценария использования NSOperation и того, как вы могли бы использовать его для решения ваших проблем.
Возможно, вы захотите выбрать один из этих отличных ответов в качестве решения. (: corydoras 16.12.2009
У Cocoa Is My Girlfriend есть хорошее руководство об использовании NSOperation и NSOperationQueue. В учебнике используется NSOperation для одновременной загрузки нескольких веб-страниц в отдельных потоках.
То, как я использую его в своих приложениях для iPhone, заключается в том, чтобы в основном создать член NSOperationQueue в моем делегате приложения и сделать его доступным через свойство. Затем каждый раз, когда мне нужно запускать что-то в фоновом режиме, например скачать XML, я просто создам NSInvocationOperation и отправлю его в очередь.
NSOperationQueue является потокобезопасным (вы можете добавлять к нему операции из разных потоков без необходимости блокировок) и позволяет связывать объекты NSOp вместе.
Приложение My Flickr для iPhone, Reflections, широко использует NSOperation и NSOperationQueue для управления загрузкой изображений и XML.
Предостережение: убедитесь, что вы прочитали, перечитали и поняли, что означают документы, когда они говорят о "параллелизме".
Ответ 4 · рейтинг 6 · esilver
Вам также следует проверить этот URL: http://developer.apple.com/cocoa/managingconcurrency.html
Все приведенные выше ответы хороши, но убедитесь, что вы прочитали статью выше и свободно используете эту строку в своем коде:
if ( self.isCancelled ) return;
Эта строка не использовалась в образцах, предоставленных Coca is my Girlfriend, и только после того, как я получил журналы сбоев с места, я понял, что это проблема / концепция.
Ответ 5 · рейтинг 5 · Flea
Вот очень простая реализация, но найдите время, чтобы прочитать руководства, чтобы полностью понять все:
Я использую его для асинхронной обработки. Это лучший способ получать данные от веб-служб или координировать действия, выполнение которых требует значительного времени. Поскольку они являются потокобезопасными, асинхронными (не связывают основной поток) и поддерживают зависимости, они являются действительно отличным инструментом для вашего набора инструментов.
Зависимости позволяют вам выполнять несколько отдельных операций и обеспечивать выполнение и успешное выполнение или ошибку в определенном порядке. Это действительно здорово, когда вам нужно синхронизировать кучу данных, но вам нужно синхронизировать родительские объекты перед синхронизацией дочерних объектов.
Ответ 7 · рейтинг 1 · Govind
Пример, который вы можете попробовать с помощью Swift
let operation : NSOperation = NSOperation()
operation.completionBlock = {
println("Completed")
}
let operationQueue = NSOperationQueue.mainQueue()
operationQueue.addOperation(operation)