5

我有这行代码:

__weak NSBlockOperation *weakOperation = operation;

这是触发此编译器错误:

__weak attribute cannot be specified on automatic variable.

原因是我没有启用 ARC(还没有准备好进行切换)。所以从另一个 StackOverFlow 问题中,我被推荐使用:

__unsafe_unretained NSBlockOperation *weakOperation = operation; 

这使错误消失了,但是对于我正在使用它的上下文,它不起作用(如果有兴趣,请参阅此问题:如何取消 NSOperationQueue)。

所以我的问题是,在这种情况下我可以用什么替换__weak关键字来消除这个警告?当我使用 时,一切实际上都正常工作__weak,但我担心它不会支持未来版本的 iOS。

4

1 回答 1

7

您不必担心 iOS 的未来版本,因为__weak编译器会在为您生成代码时解释某些内容。

查看您的另一篇文章向我表明,您的目标是避免weakOperation被保留,尽管来自块内的引用。在您不使用 ARC 的特定情况下,您可以替换__weak__block以指示在捕获期间不应保留您的变量

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

于 2013-01-23T17:02:02.467 回答