在不使用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的地方,你可以用__blockreplace__weak来指示你的variables在捕获过程中应该被保留。

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