1

У меня есть очередь NSOperation и четыре NSOperations, которые работают в ней.Отмена NSOperation из другого NSOperation

NSOperationQueue myQueue = [[NSOperationQueue alloc] init]; 
NSOperation readOperation = [[NSOperation alloc] init]; 
NSOperation postOperation = [[NSOperation alloc] init]; 
NSOperation deleteOperation = [[NSOperation alloc] init]; 

Я знаю, что отмена может быть вызвана объектом NSOperation. Если я позвоню

[postOperation cancel]; 

ли оно отменено сразу от myQueue?

Также я хотел бы отменить deleteOperation из postOperation.

Это работает?

postOperation = [NSBlockOperation blockOperationWithBlock: ^{ 
           [deleteOperation cancel]; 
           /**** do a HTTP post ****/ 
           }]; 
[myQueue addOperation:postOperation]; 

По существу я хочу, чтобы отменить операцию удаления, прежде чем я сделать POST, если если операция выполняется. Также

[myQueue setMaxConcurrentOperationCount:1]; 

Убедитесь, что очередь операций FIFO?

ответ

0

Per NSOperation документации:

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

Очередь вызовет операционные операции start, которые затем должны пометить его как готовое без какой-либо полезной работы.

Обратите внимание, что этот метод можно переопределить, это подклассы. Apple просит вас создать то же поведение, что и в NSOperation, но оно все еще зависит от разработчика.

[myQueue setMaxConcurrentOperationCount:1]; убедиться, что очередь операций FIFO?

Это отдельный вопрос. Ответ - нет. У вас нет контроля над операциями, отличными от заданных зависимостей (это то, что вы должны делать).

Смежные вопросы