我有这行代码:
__weak NSBlockOperation *weakOperation = operation;
这是触发此编译器错误:
__weak attribute cannot be specified on automatic variable.
这样做的原因是我没有启用 ARC(还没有准备好进行切换)。所以从另一个 StackOverFlow 问题,我被推荐使用:
__unsafe_unretained NSBlockOperation *weakOperation = operation;
这使得错误消失了,但是对于我正在使用它的上下文,它不起作用(如果有兴趣请参阅这个问题:How to cancel NSOperationQueue)。
所以我的问题是,在这种情况下,我可以用什么替换 __weak
关键字来消除此警告?当我使用 __weak
时,一切实际上都正常工作,但我担心它不会支持 future 版本的 iOS。
最佳答案
你不应该担心 iOS 的 future 版本,因为 __weak
是编译器在为你生成代码时解释的东西。
查看您的其他帖子向我表明,您的目标是避免 weakOperation
被保留,尽管在 block 内有引用。在您不使用 ARC 的特定情况下,您可以将 __weak
替换为 __block
以指示您的变量应该不在期间保留捕获。
请注意,__block
对 retain
行为的影响在 ARC 和手动保留计数之间是不同的。
关于ios - 不使用 ARC 时替换 __weak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484964/