澄清弱引用和保留周期

Sha*_*ali 4 iphone weak-references ios automatic-ref-counting afnetworking

我有以下代码:

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

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

    }
};
Run Code Online (Sandbox Code Playgroud)

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

我对参考没有很多经验,有什么想法去哪里?

谢谢,
Shai

jac*_*ash 6

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

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

最好的办法是创建一个对象的弱引用,然后传入它

AFHTTPRequestOperation * __weak theOperation = operation

operation.completionBlock = ^{
    if (theOperation) {
        return;
    }
};
Run Code Online (Sandbox Code Playgroud)

弱引用在运行时是安全的,因此如果操作已被解除分配,您将只发送一条消息给nil.