当不使用ARC时,替代__weak的方法是什么?

5

我有这行代码:

__weak NSBlockOperation *weakOperation = operation;

引起编译器错误的是:

__weak attribute cannot be specified on automatic variable.

我之所以这样做是因为我没有启用ARC(尚未准备好切换)。因此,从另一个StackOverFlow问题中,我被推荐使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

这使得错误消失了,但是在我使用它的上下文中,它并没有起作用(如果感兴趣,请参见此问题:如何取消NSOperationQueue)。
所以我的问题是,在这种情况下我可以用什么来替换__weak关键字以摆脱这个警告?当我使用__weak时,一切实际上都工作正常,但我担心它在未来的iOS版本中可能不再适用。
1个回答

7
您不必担心iOS的未来版本,因为__weak是编译器在为您生成代码时解释的内容。
从您的另一篇帖子中可以看出,您的目标是避免weakOperation在块内部引用时被保留。在您不使用ARC的特定情况下,您可以将__weak替换为__block,以指示您的变量在捕获期间应该被保留。
请注意,__blockretain行为的影响在ARC和手动保留计数之间是不同的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接