替代__weak不使用ARC时(substituting for __weak when not u

2019-08-08 01:00发布

我有这行代码:

__weak NSBlockOperation *weakOperation = operation;

该触发此编译器错误:

__weak attribute cannot be specified on automatic variable.

这样做的原因是我没有ARC启用(不准备作出这样的转变,只是还没有)。 因此,从另一个StackOverflow上的问题,我建议使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

这使得错误消失,但我使用它的背景下,它不工作(见这个问题,如果有兴趣: 如何取消NSOperationQueue )。

所以我的问题是,我可以替代__weak在这种情况下关键字摆脱这种警告? 实际上一切都正常工作时,我使用__weak ,但恐怕它不会托起过的iOS的未来版本。

Answer 1:

因为你不应该担心的iOS的未来版本__weak是一些由编译器而对你产生代码的解释。

看着你的其他职位建议,我认为你的目标是避免weakOperation要保留尽管该块内引用。 在特定情况下,如果你不使用ARC,可以更换__weak通过__block ,表明您的变量应该拍摄时,可保留。

需要注意的是影响__blockretain的行为是ARC和手动之间不同的挽留计数。



文章来源: substituting for __weak when not using ARC