我有以下代码:
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request];
operation.completionBlock = ^{
if([operation hasAcceptableStatusCode]){
}
};
ARC似乎不喜欢[operation hasAcceptableStatusCode],并且我收到以下警告:“在此块中强烈捕获'操作'可能会导致保留周期”。
我对参考不是很有经验,有什么想法可以去这里吗?
谢谢,
晒
答案 0 :(得分:6)
阻止捕获(保留)从外部引用的对象。
操作将保留completionBlock,这将保留操作,因此保留周期。
最好的办法是创建一个对象的弱引用并将其传递给
AFHTTPRequestOperation * __weak theOperation = operation
operation.completionBlock = ^{
if (theOperation) {
return;
}
};
弱引用在运行时是安全的,因此如果操作已被解除分配,您只需向nil发送消息。