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