【发布时间】:2015-07-29 17:54:45
【问题描述】:
我正在将一个项目转换为 ARC,但有些代码只能在禁用 ARC 的情况下工作。我意识到 -fno-objc-arc 可用于在每个文件的基础上禁用 ARC。但是我想知道是否可以在每个功能的基础上禁用 ARC。
我知道警告可以在例如每行的基础上切换
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Weverything"
// Code goes here
#pragma clang diagnostic pop
ARC 有类似的东西吗? (以下是我的假设)
#pragma clang diagnostic push
#pragma clang diagnostic flag "-fno-objc-arc"
// Code goes here
#pragma clang diagnostic pop
【问题讨论】:
-
“只能在禁用 ARC 的情况下工作”听起来有点可疑。如果属实,则表明存在无法在 ARC 环境中编写的程序。
-
是的。有些东西不能用ARC写。例如,具有目标 c 对象的结构。这在 ARC 中是不允许的,将结构移植到类不是一种选择。
-
逐行执行会禁用 ARC 进行 RR 优化的某些能力——据我所知,基本上使 ARC 本身对于包含该行的范围毫无意义。在范围基础上禁用它——例如每个函数/方法——似乎是可能的,但可能不足以证明维护的合理性。
-
@Calimari328 你不能在 Obj-C 的结构中使用 obj-c 引用,但你可以在 Objective-C++ 中使用。
标签: ios objective-c clang automatic-ref-counting llvm