迁移到命名标准不佳的 Arc
Posted
技术标签:
【中文标题】迁移到命名标准不佳的 Arc【英文标题】:Migrating to Arc with poor naming standards 【发布时间】:2012-09-16 06:39:18 【问题描述】:我正在处理一个经常忽略命名标准的代码库。因此,即使方法名称不符合 NARC,某些类中的方法也会返回引用计数为 1 的对象。很棒的东西。
我想将项目转换为使用自动引用计数,但我有点紧张,因为 NARC 命名标准已被完全忽略。有谁知道 ARC 是否依赖 NARC 命名标准才能正常工作?
谢谢,
肖恩
【问题讨论】:
【参考方案1】:ARC 确实依赖命名约定才能正常工作。不过……
如果您只使用 ObjC 对象,那么只要您仅拥有 ARC 代码,它通常会“成功”。例如,如果您有这样的方法:
- (id)something
return [[Something alloc] init];
这是错误的(在非 ARC 代码中),但 ARC 会通过有效地添加额外的 autorelease
来平衡它。其实上面是正确的ARC代码,所以没问题。
如果这几乎是所有 ObjC 代码,我的建议是自动转换为 ARC,然后运行静态分析器。如果它是相当简单的代码,只是碰巧有错误的命名,问题实际上可能比你担心的要小得多。
如果这是大量 Core Foundation 的免费桥接代码,事情会稍微复杂一些。然后我建议先运行静态分析器并在转换之前正确命名。幸运的是,静态分析器非常擅长命名约定。
【讨论】:
谢谢罗伯。我会将整个代码库转换为 arc(除了一些外部库,如 Reachability、JSONKit)【参考方案2】:我不得不将几个项目转换为 ARC,到目前为止,由于命名约定,我从未直接遇到任何问题。
实际上,转换非常简单 - 所以虽然我完全理解你对你必须处理的代码的想法 - 我真的不会太担心。
到目前为止,只要要转换的代码首先是正确的并且以某种方式清晰易懂,我在转换过程中从未遇到任何严重困难的情况。
事实上,我发现使用 ARC 与任何其他具有内置 GC 的语言一样没有问题 - 当然涉及内存问题!
在最坏的情况下,您可能总是运行静态分析器 - 但现在 ARC 很少需要这样做。
这里讨论的可能是最危急的情况:What kind of leaks does automatic reference counting in Objective-C not prevent or minimize?
【讨论】:
以上是关于迁移到命名标准不佳的 Arc的主要内容,如果未能解决你的问题,请参考以下文章