ios - 不使用 ARC 时替换 __weak

标签 ios cocoa-touch objective-c-blocks nsoperationqueue retain-cycle

我有这行代码:

__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 以指示您的变量应该在期间保留捕获。

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

关于ios - 不使用 ARC 时替换 __weak,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484964/

相关文章:

iphone - 取消缩放 UIScrollView

ios - 不兼容的 block 类型分配

ios - 在远处使用大型 3D 模型时避免 ARkit 和 SceneKit 中的纹理和阴影闪烁

ios - 找出 NSArray/NSMutableArray 变化的索引

objective-c - NSOperationQueue随机暂停吗?

ios - NSDecimalNumber decimalNumberWithString : ignores current locale

ios - 编译器是否保存函数的参数?

ios - 用于上传和下载文件的 iCloud 集成

ios - 如何使用 openssl 解密使用 CCCrypt 在 Objective-C 中创建的文件?

iphone - 将数据保存到缓存目录时出错 (iPhone)