在不使用ARC时替代__weak
我有这样的代码行:
__weak NSBlockOperation *weakOperation = operation;
这是触发这个编译器错误:
__weak attribute cannot be specified on automatic variable.
原因是我没有启用ARC(尚未准备好进行切换)。 所以从另一个StackOverFlow问题,我被推荐使用:
__unsafe_unretained NSBlockOperation *weakOperation = operation;
这使得错误消失,但对于我使用它的上下文,它不工作(如果感兴趣,请参阅此问题: 如何取消NSOperationQueue )。
所以我的问题是,在这个例子中,我可以用__weak
关键字替代__weak
这个警告? 当我使用__weak
,所有的东西都能正确的工作,但是恐怕它不能支撑未来版本的iOS。
你不应该担心iOS的未来版本,因为__weak
是编译器在为你生成代码的时候解释的东西。
看着你的另一个post,向我暗示,你的目标是避免操作weakOperation
,尽pipe在块内引用。 在你的具体情况下,你不使用ARC的地方,你可以用__block
replace__weak
来指示你的variables在捕获过程中不应该被保留。
请注意, __block
对retain
行为的影响在ARC和手动保留计数之间是不同的。