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

时间:2012-02-02 12:10:31

标签: iphone cocoa-touch ios5 nsoperation nsoperationqueue

我试图找出为什么在添加到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之前执行,但是要么被执行,要么在没有依赖项的情况下执行,两者都可以正常工作。有人知道为什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:6)

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