Я использую NSInvocationOperation
с NSOperationQueue
разработкой в iOS5. Согласно документации Apple по объектам вызова:
Класс NSInvocationOperation является конкретным подклассом NSOperation ... Этот класс реализует непараллельную операцию.
Итак, мой объект NSInvocationOperation
выполняется синхронно? (поправьте меня здесь) В документации Apple также говорится об объектах очереди операций:
В iOS очереди операций не используют Grand Central Dispatch для выполнения операций. Они создают отдельные потоки для непараллельных операций и запускают параллельные операции из текущего потока.
Я использую NSInvocationObject
, который не является параллельным объектом, и добавляю его в очередь операций следующим образом:
[operationQueue addOperation:operation];
Итак, мой вопрос: 1) Поскольку очередь операций будет порождать отдельный поток для выполнения NSInvocationObject, как сказано в документации, будет ли он выполняться асинхронно, а не синхронно?
[ОБНОВЛЕНИЕ - в ответ на ответ Дэни ниже. Взято из ссылки Apple.
NSOperation и NSOperationQueue
Существует несколько различных способов использования NSOperation, но наиболее распространенным является создание собственного подкласса и переопределение одного метода: main. Основной метод вызывается для выполнения операции, когда NSOperationQueue планирует ее запуск. Классы NSOperation, написанные таким образом, известны как непараллельные операции, потому что разработчик не несет ответственности за порождение потоков - многопоточность обрабатывается суперклассом. (Пусть вас не смущает терминология: то, что операция не является параллельной, не означает, что она не может выполняться одновременно, это просто означает, что вам не нужно обрабатывать параллелизм самостоятельно.) strong >
Если вам нужен больший контроль над потоками и средой выполнения ваших операций, вы можете использовать параллельные операции. Для этого вы создаете подкласс NSOperation и переопределяете метод запуска. В методе запуска вы можете создавать потоки и настраивать среду перед вызовом основного метода. Вы также должны поддерживать состояние NSOperation, задавая такие свойства, как isExecuting и isFinished. Короче говоря, параллельные операции дают вам гораздо больший контроль, но также требуют больше усилий - для большинства задач одновременных операций достаточно.