使用 ARC 处理面向 4.0 和 5.0 的 iOS 项目。
遇到与块、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,但它的任何属性都不会在块内填充。
考虑到上面列出的项目限制,处理这种情况的最佳方法是什么?