Класс NSInvocationOperation
- это конкретный подкласс NSOperation
, в котором реализует непараллельную операцию .
В случае одновременной операции задача операции выполняется синхронно , то есть объект операции не создает отдельный поток, в котором выполняется задача. Таким образом, когда вызывается метод start
не параллельной операции, операция выполняется немедленно в текущем потоке. К тому времени, когда метод start
такого объекта возвращает управление вызывающей стороне, сама задача завершена.
Однако использование NSOperationQueue
меняет это поведение. NSOperationQueue всегда выполняет операции одновременно; непараллельная операция требует отдельного потока для одновременного выполнения, и NSOperationQueue
предоставляет этот поток.
Это означает, что если вы выполните NSInvocationOperation
напрямую, вы сможете получить доступ к потокобезопасному объекту UIKit (операция будет выполняться в том же потоке). В вашем случае, если вы используете NSOperationQueue
, вы должны запланировать работу, которая использует объект UIKit в основном потоке, используя executeSelectorOnMainThread: withObject: waitUntilDone: из вашего селектора вызова.