NSOperation с зависимостью не выполняется при добавлении в NSOperationQueue - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь выяснить, почему операция NSO с зависимостью не выполняется при добавлении в NSOperationQueue (iOS5, ARC):

@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 Ответ

6 голосов
/ 13 февраля 2012

Вы должны явно указать любую операцию в очереди операций (или выполнить ее напрямую), чтобы она могла быть выполнена - и зависимости не являются исключением.Без этого (как вы сделали) op2 никогда не выполнится, потому что ожидает выполнения op1, когда op1 никогда не было сказано выполнить.Таким образом, добавив [_operationQueue addOperation: op1]; в конце вашего test метода, ваша проблема должна быть исправлена.

...