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

标签 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 的核心是程序,它们确实认为有些东西是不同的。

言归正传,如果在方法名中使用关键字,究竟会面临什么样的危险(现在,或者将来)?如果它现在有效,是否意味着它会一直有效,或者 future 的更新可能会与这些方法冲突?

注意:我不确定这个问题属于 SO 还是 Programmers .我请求版主做出决定,并在需要时迁移。

最佳答案

首先,Objective-C 是一种文档松散的语言,我不知道是否有当前的正式正式语法,Apple 的最新版本 The Objective-C Programming Language 是 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+Click 调用第一个方法跳转到第二个方法...哎呀!

语法着色也很困惑,但这并不奇怪。

我的建议是向 Apple 提交错误报告,至少这可能会导致正式回应,并避免使用关键字作为方法名称部分 - 不是因为代码不起作用,而是因为 Xcode 变得困惑。

HTH

关于objective-c - 在方法名称中使用关键字的危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004071/

相关文章:

ios - 如何在 Core Data 中保存有关系的实体

ios - 乱舞问题 : Xcode 7 and Swift Language

ios - 无法创建新的模型版本

python - 如何在 Python 中使用方法引用方法名称?

ContainerView中嵌入的iOS7 SplitviewController不旋转

iphone - 图片放入数组 ios开发

objective-c - 如何在 Mac OS X 应用程序中实现终端?

iphone - 我想在接受用户输入的屏幕上弹出一个小 View (200x200)

java - 使用一种方法将 3 种不同类型的对象添加到一个 ArrayList 的简单方法?

c# - 在方法中修改变量是不好的做法吗?