我有一个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吗?
答案 0 :(得分:0)
Per NSOperation
文档:
...如果某个操作在队列中但等待未完成的相关操作,则会忽略这些操作。 ...允许操作队列更快地调用操作的start方法并将对象清除出队列。
队列将立即调用操作的start
方法,然后将其标记为已完成,而不进行任何有用的工作。
请注意,您可以覆盖此方法是子类。 Apple要求您创建与NSOperation
中相同的行为,但仍由开发人员决定。
确实
[myQueue setMaxConcurrentOperationCount:1];
确保操作队列是FIFO吗?
这是一个单独的问题。答案是不。除了设置依赖项之外,您无法控制操作顺序(这就是您应该做的事情)。