在方法名称中使用关键字的危险

时间:2014-01-08 18:49:16

标签: objective-c xcode methods keyword

我知道不允许使用关键字作为变量名。但有些事情让我想到在方法名称中使用关键字。

我最近为iOS应用程序继承了一个XCode项目,在许多的地方,我注意到其他编码器在方法名称中使用了关键字,例如:

- (NSMutableDictionary*) appendData:(NSMutableDictionary*)incomingData for:(NSDictionary*)responseData

- (int) findCompensatedIndexOf:(id)searchQuery in:(NSArray*)floorData

在上述方法中,使用关键字forin。现在,应用程序在模拟器和设备上都运行得非常好,这意味着它可以正常工作。另一方面,当在XCode中使用调用方法的方法名称CMD + Click时,没有任何反应。如果您使用CMD +单击某个方法,XCode将跳转到相关类中的方法,但不在此处。

现在我明白该应用程序运行完全正常,但在我的脑海中,我对此持怀疑态度。毕竟,操作系统和IDE的核心是程序,它们会感知到不同的东西。

回到这一点,如果他们在方法名称中使用关键字,那么他们(当前或将来)会面临什么样的危险?如果它现在有效,它是否意味着它将始终有效,或者未来的更新可能会与这些方法发生冲突?

注意:我不确定此问题是否属于此处,或Programmers。我请求版主决定,并在需要时进行迁移。

2 个答案:

答案 0 :(得分:2)

首先,Objective-C是一种松散的文档语言,我不知道是否有一个当前的官方正式语法和Apple的上一版 Objective-C编程语言的日期是2009年和过时了。因此,接下来的所有内容都是(略受过教育的)猜测。

似乎没有限制使用等同于方法名称中的关键字的字母序列,并且不太可能。这是因为方法名称是其部分的串联,并且各个部分不是独立的实体,例如,您的两个示例是appendData:for:findCompensatedIndexOf:in:,并且对包含与关键字匹配的字母子序列的标识符没有限制,例如forest即使包含for也有效。

您所看到的看起来像编译器的“功能”,它们将各种接受关键字作为方法名称部分并让自己陷入混乱。如果子部分是关键字,则CMD + Click不起作用。例如,给出两种方法:

- (void) anotherMethod:(int)x for:(int)z arg:(int)y;
- (void) anotherMethod:(int)x arg:(int)y;

然后CMD +点击第一个方法的调用跳转到第二个方法... oops!

语法着色也搞砸了,但这并不太令人惊讶。

我的建议是向Apple提交错误报告,至少可能违反正式回复,并避免使用关键字作为方法名称部分 - 不是因为代码不起作用,而是因为Xcode混乱。

HTH

答案 1 :(得分:0)

你遗漏了一些重要内容:虽然你在方法中使用“for”和“in”,但它们不是方法名称,它们是其中的一部分,因为在目标c中,方法名称是全名,如findCompensatedIndexOf:in:和appendData:for:这就是为什么在我的理解中,编译器没有显示方法错误但显示带变量,总名称不是关键字。

所以这对你来说不会是一个问题,也不会在未来。