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 ではありませんが、ブロック内にある場合、そのプロパティはどれも設定されません。
上記のプロジェクトの制約を考慮して、この状況を処理する最善の方法は何ですか?