使用它是否总是安全的;id";作为Objective-C协议中的方法名称?

使用它是否总是安全的;id";作为Objective-C协议中的方法名称?,objective-c,Objective C,在我正在处理的客户机代码库中,有人在协议中命名了一个方法,如下所示:- - (NSString *)id; 我知道它编译得很好,而且我知道它在Objective-C中不是一个保留字(如前所述),但我仍然对此有点不安。除了美学问题,我特别担心未来的证明:这是否保证始终是法律目标-C 我必须使用协议,我不知道是否值得全面更改协议(以及与客户关于我为什么这样做的对话)。不。特别是,它可能永远是法律目标-C,但标签“id”本身很像标签“测试”:使用它是不明智的,因为它几乎肯定最终会与环境中的其他东西

在我正在处理的客户机代码库中,有人在协议中命名了一个方法,如下所示:-


- (NSString *)id;
我知道它编译得很好,而且我知道它在Objective-C中不是一个保留字(如前所述),但我仍然对此有点不安。除了美学问题,我特别担心未来的证明:这是否保证始终是法律目标-C


我必须使用协议,我不知道是否值得全面更改协议(以及与客户关于我为什么这样做的对话)。

不。特别是,它可能永远是法律目标-C,但标签“id”本身很像标签“测试”:使用它是不明智的,因为它几乎肯定最终会与环境中的其他东西发生冲突。您的语言是Objective-C,但任何框架、导入、类扩展等最终都会涉及到其他称为“id”的东西

跟踪一个bug可能会让人恼火,例如,决定移植现有代码以使用某个有用的框架,却发现您的“id”正在覆盖框架所期望的值,或者框架/mixin/subclass/任何正在覆盖或重新定义它而您却不知道


<>我避开了在我遇到的每一种语言和环境中,我认为普遍过载的标签,如“doc”、“test”、“id”和“init”(当没有在Langx中预留)。似乎这些术语的使用总是以悲伤告终。(大规模搜索/替换的痛苦,这并不总是像代码中简单的文本替换那么容易)。

我同意这是一种糟糕的风格,我从来没有这样做过,但这是一个非常庞大的现有代码库。更改它不仅仅是一个简单的搜索/替换,因为“id”是一个到处使用的Objective-C类型。我试图平衡改变它的痛苦和离开它的风险。如果它已经深深地嵌入到代码库中,那么离开它是你唯一可行的选择。但是,可以隔离它的使用,并开始在任何新代码中将其别名为其他内容(如
foo=id
初始定义id的地方)。对旧代码的任何维护更改都可以使用新的符号,您最终可以将其删除——但是,即使记住这样做,也可能比它的价值更难以记账。就像几乎所有其他事情一样,“视情况而定”。-)