从另一个NSOperation取消NSOperation

时间:2013-12-01 23:46:17

标签: ios objective-c grand-central-dispatch nsoperation nsoperationqueue

我有一个NSOperation队列,还有四个运行在其中的NSOperations。

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

我知道取消可以称为NSOperation对象。如果我打电话给

[postOperation cancel];

是否会立即从myQueue取消?

另外我想从postOperation中取消deleteOperation。

这有用吗?

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

基本上我想在POST之前取消删除操作,如果该操作正在执行。

也是
[myQueue setMaxConcurrentOperationCount:1];

确保操作队列是FIFO吗?

1 个答案:

答案 0 :(得分:0)

Per NSOperation文档:

  

...如果某个操作在队列中但等待未完成的相关操作,则会忽略这些操作。 ...允许操作队列更快地调用操作的start方法并将对象清除出队列。

队列将立即调用操作的start方法,然后将其标记为已完成,而不进行任何有用的工作。

请注意,您可以覆盖此方法是子类。 Apple要求您创建与NSOperation中相同的行为,但仍由开发人员决定。

  

确实[myQueue setMaxConcurrentOperationCount:1];确保操作队列是FIFO吗?

这是一个单独的问题。答案是不。除了设置依赖项之外,您无法控制操作顺序(这就是您应该做的事情)。