澄清弱引用和保留周期

时间:2011-11-20 16:59:29

标签: iphone ios automatic-ref-counting weak-references afnetworking

我有以下代码:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request];

operation.completionBlock = ^{
    if([operation hasAcceptableStatusCode]){

    }
};

ARC似乎不喜欢[operation hasAcceptableStatusCode],并且我收到以下警告:“在此块中强烈捕获'操作'可能会导致保留周期”。

我对参考不是很有经验,有什么想法可以去这里吗?

谢谢,

1 个答案:

答案 0 :(得分:6)

阻止捕获(保留)从外部引用的对象。

操作将保留completionBlock,这将保留操作,因此保留周期。

最好的办法是创建一个对象的弱引用并将其传递给

AFHTTPRequestOperation * __weak theOperation = operation

operation.completionBlock = ^{
    if (theOperation) {
        return;
    }
};

弱引用在运行时是安全的,因此如果操作已被解除分配,您只需向nil发送消息。