Ссылка на объект NSOperation в его собственном блоке завершения в ARC

У меня возникают трудности с преобразованием некоторого кода NSOperation в ARC. Мой объект операции использует блок завершения, который, в свою очередь, содержит блок GCD, обновляющий пользовательский интерфейс в главном потоке. Поскольку я ссылаюсь на объект операции внутри его собственного блока завершения, я использую __слабый указатель, чтобы избежать утечки памяти. Однако к моменту выполнения моего кода указатель уже установлен в nil.

Я сузил проблему до этого примера кода. Кто-нибудь знает, где я ошибся и как правильно это сделать?

NSOperationSubclass *operation = [[NSOperationSubclass alloc] init];
__weak NSOperationSubclass *weakOperation = operation;

[operation setCompletionBlock:^{
    dispatch_async( dispatch_get_main_queue(), ^{

        // fails the check
        NSAssert( weakOperation != nil, @"pointer is nil" );

        ...
    });
}];
12
задан Marc Charbonneau 10 February 2012 в 05:15
поделиться