4

我有以下代码:

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

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

    }
};

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

我对引用不是很有经验,知道怎么走吗?

谢谢,

4

1 回答 1

6

块捕获(保留)您从外部引用的对象。

操作将保留将保留操作的完成块,因此保留周期。

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

AFHTTPRequestOperation * __weak theOperation = operation

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

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

于 2011-11-20T17:23:23.217 回答