У меня возникают трудности с преобразованием некоторого кода 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" );
...
});
}];