4

我有以下代码:澄清关于弱引用和保留周期

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

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

    } 
}; 

ARC似乎并不喜欢[操作hasAcceptableStatusCode],我得到以下警告:“捕获‘操作’强烈这个区块很可能会导致保留周期“。

我不是很有经验的参考,任何想法什么方式去这里?

感谢,
夏嘉曦

回答

6

块捕获(保留),你从他们的外引用的对象。

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

做的最好的事情是创建一个弱引用的对象,并把它传递代替

AFHTTPRequestOperation * __weak theOperation = operation 

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

弱引用是在运行时的安全,所以如果操作已经dealloced你只是将消息发送到零。

+0

有点奇怪,但它做的工作,谢谢:) –