NSOperation在添加到NSOperationQueue时没有执行依赖项

jlp*_*ita 1 iphone cocoa-touch nsoperation nsoperationqueue ios5

我试图弄清楚为什么在添加到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
Run Code Online (Sandbox Code Playgroud)

这让我抓狂,这里op1应该先执行op2,但要么执行,要么在没有依赖的情况下添加都可以正常工作.有人知道为什么吗?

提前致谢.

And*_* R. 6

您必须显式地对操作队列执行任何操作(或直接执行它)才能执行 - 依赖项也不例外.如果没有这样做(正如你所做的那样)op2将永远不会执行,因为它等待op1执行,op1从未被告知执行.因此,通过[_operationQueue addOperation: op1];test方法结束时添加,您的问题应该得到解决.