比如我有3个对象:NSOperationQueue:一系列NSOperation的依赖VS(maxConcurrentOperationCount == 1)?
NSOperation *op1 = ...;
NSOperation *op2 = ...;
NSOperation *op3 = ...;
[op3 addDependency:op2];
[op2 addDependency:op1];
NSOperationQueue *queue = ...;
queue.maxConcurrentOperationCount = 1;
[queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
我可以简单地添加在正确的顺序所有操作。但是,例如,如果op2
被取消,那么我也应该取消op3
,在这种情况下我不能完全清除队列。
我的问题:
1)它是安全的操作,如序列与maxConcurrentOperationCount == 1
结合?
2)如果我换到op1
和op2
左右,程序实际上会做什么? (op2
应在op1
之后执行,但队列只能同时从操作中取出一个)
P.S.在我的应用程序中,我使用AFHTTPRequestOperation
。它的继承层次:
AFHTTPRequestOperation
- >AFURLConnectionOperation
- >NSOperation
所以我不能简单地采取其他的NSOperation
子类。
我同意几乎所有的事情,但等待。 'NSBlockOperation'具有'executionBlocks'。我应该在添加检查单独块时取消吗? – Gargo 2014-11-18 19:29:35
显然是的,即使在块中,您也需要明确检查操作取消。您可以在将其添加到队列并查看会发生什么之前取消操作来自行尝试。 – 2014-11-18 20:53:26
如果包含块操作的队列被取消,那么它甚至不会启动。你只需要检查isCancelled如果在块内做一些像循环一样慢的事情。 – malhal 2017-01-09 01:31:38