Работа над проектом iOS, ориентированным на 4.0 и 5.0, с использованием ARC.
Возникла проблема, связанная с блоками, ARC и ссылкой на объект извне блока. Вот код:
__block AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlock:^ {
if ([operation isCancelled]) {
return;
}
... do stuff ...
operation = nil;
}];
В этом случае компилятор выдает предупреждение о том, что использование «операции» в блоке приведет к циклу сохранения. В ARC __block теперь сохраняет переменную.
Если я добавлю __unsafe_unrehibited, компилятор немедленно освободит объект, поэтому очевидно, что это не сработает.
Я нацелен на 4.0, поэтому я не могу использовать __weak.
Я пробовал сделать что-то вроде этого:
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation;
, но хотя weakOperation не равен нулю, ни одно из его свойств не заполняется внутри блока.
Как лучше всего справиться с этой ситуацией с учетом перечисленных выше ограничений проекта?