使用ARC處理目標爲4.0和5.0的iOS項目。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不爲零,沒有它的屬性被填充時,塊內。
考慮到上面列出的項目限制,處理這種情況的最佳方法是什麼?
我已經有了'沒有保留週期'的東西,我甚至都沒有按照你描述的方式去思考。咄。下一個問題 - 任何方式來沉默編譯器警告?它會讓我發瘋。 – Hunter
請參閱Clang用戶手冊中的[「通過Pragma控制診斷」](http://clang.llvm.org/docs/UsersManual.html#diagnostics_pragmas)。你只需要弄清楚哪個警告標誌要忽略。 –
這是'#pragma clang diagnostic ignored'-Warc-retain-cycles「',由by。 –