我试图找出为什么在添加到NSOperationQueue(iOS5,ARC)时没有执行具有依赖关系的NSOperation:
@implementation NSOperationTest {
NSOperationQueue *_operationQueue;
}
- (id)init {
self = [super init];
if (self) {
_operationQueue = [[NSOperationQueue alloc] init];
}
return self;
}
-(void) test
{
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op1 running");
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op2 running");
}];
[op2 addDependency:op1];
[_operationQueue addOperation:op2];
}
@end
这让我抓狂,这里op1
应该在op2
之前执行,但是要么被执行,要么在没有依赖项的情况下执行,两者都可以正常工作。有人知道为什么吗?
提前致谢。
答案 0 :(得分:6)
您必须显式地对操作队列执行任何操作(或直接执行它)才能执行 - 并且依赖项也不例外。如果没有这样做(正如你所做的那样),op2
永远不会执行,因为它等待op1
执行,而op1
从未被告知执行。因此,通过在[_operationQueue addOperation: op1];
方法的末尾添加test
,您的问题应该得到解决。