我正在处理一个经常忽略命名标准的代码库。因此,即使方法名称不符合 NARC,某些类中的方法也会返回引用计数为 1 的对象。很棒的东西。
我想将该项目转换为使用自动引用计数,但我有点紧张,因为 NARC 命名标准已被完全忽略。有谁知道 ARC 是否依赖 NARC 命名标准才能正常工作?
谢谢,
肖恩
我正在处理一个经常忽略命名标准的代码库。因此,即使方法名称不符合 NARC,某些类中的方法也会返回引用计数为 1 的对象。很棒的东西。
我想将该项目转换为使用自动引用计数,但我有点紧张,因为 NARC 命名标准已被完全忽略。有谁知道 ARC 是否依赖 NARC 命名标准才能正常工作?
谢谢,
肖恩
ARC 确实依赖于命名约定才能正常工作。然而...
如果您只使用 ObjC 对象,那么只要您只有ARC 代码,它通常会“解决”。例如,如果您有如下方法:
- (id)something {
return [[Something alloc] init];
}
这是错误的(在非 ARC 代码中),但 ARC 会通过有效添加额外的autorelease
. 其实上面是正确的ARC代码,所以没问题。
如果这几乎是所有 ObjC 代码,我的建议是自动转换为 ARC,然后运行静态分析器。如果它是相当简单的代码恰好有错误的命名,那么问题实际上可能比你担心的要小得多。
如果这是大量 Core Foundation 免费桥接代码,事情会稍微复杂一些。然后我建议先运行静态分析器并在转换之前正确命名。幸运的是,命名约定是静态分析器非常擅长的。
我不得不将几个项目转换为 ARC,到目前为止,由于命名约定,我从未直接遇到任何问题。
实际上转换是非常直接的 - 所以虽然我完全理解你对你必须处理的代码的心态 - 我真的不会太担心。
到目前为止,只要要转换的代码首先是正确的并且以某种方式清晰易懂,我在转换过程中从未遇到任何严重困难的情况。
事实上,我发现使用 ARC 与任何其他内置 GC 的语言一样没有问题——当然涉及内存问题!
在最坏的情况下,您可能总是运行静态分析器——但现在 ARC 很少需要这样做。
这里可能讨论了最关键的情况:Objective-C 中的自动引用计数不能防止或最小化什么样的泄漏?