Работа над проектом 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_unretained, компилятор немедленно освобождает объект, поэтому, очевидно, это не сработает.
Я нацеливаюсь на 4.0, чтобы я мог 'я не использовал __weak.
Я пытался сделать что-то вроде этого:
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation;
, но, хотя weakOperation не равен nil, ни одно из его свойств не заполняется внутри блока.
Как лучше всего справиться с этой ситуацией, учитывая ограничения проекта, перечисленные выше?