不使用ARC时替换__weak

时间:2013-01-23 16:48:54

标签: ios cocoa-touch objective-c-blocks nsoperationqueue retain-cycle

我有这行代码:

__weak NSBlockOperation *weakOperation = operation;

触发此编译器错误:

__weak attribute cannot be specified on automatic variable.

原因是我没有启用ARC(尚未准备好进行切换)。所以从另一个StackOverFlow问题,我被建议使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

这使得错误消失了,但对于我正在使用它的上下文,它不起作用(如果感兴趣,请参阅此问题:How to cancel NSOperationQueue)。

所以我的问题是,在这个实例中我可以用__weak关键字代替什么来摆脱这个警告?当我使用__weak时,一切都能正常工作,但我担心它不会影响iOS的未来版本。

1 个答案:

答案 0 :(得分:7)

您不应该担心iOS的未来版本,因为__weak是编译器在为您生成代码时解释的内容。

查看您的其他帖子向我建议您的目标是避免weakOperation保留,尽管在块内引用。在您不使用ARC的特定情况下,您可以将__weak替换为__block,以表明在捕获过程中您的变量应

请注意,__blockretain行为的影响在ARC和手动保留计数之间是不同的。