我有这行代码:
__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的未来版本。
答案 0 :(得分:7)
您不应该担心iOS的未来版本,因为__weak
是编译器在为您生成代码时解释的内容。
查看您的其他帖子向我建议您的目标是避免weakOperation
保留,尽管在块内引用。在您不使用ARC的特定情况下,您可以将__weak
替换为__block
,以表明在捕获过程中您的变量应 。
请注意,__block
对retain
行为的影响在ARC和手动保留计数之间是不同的。