39

我正在读一本书 - Big Nerd Ranch iOS Programming。它说不建议使用点表示法,因为它会混淆代码。我同时在观看斯坦福的 iOS 编程课程,他在那里广泛使用点符号。你会推荐什么?我个人更倾向于括号符号。

您能否解释一下如何将此代码转换为括号符号?

self.display.text = [self.display.text stringByAppendingString:digit];

据我了解应该是:

[[self display] setText]:[[[self display] text] stringByAppendingString:digit];

这是正确的吗?

4

3 回答 3

62

这是个人选择的问题。有些人认为,点表示法使消息正在发送(正在调用的方法)变得不清楚,因为它看起来就像 C 样式的结构元素访问。争论的另一面是点符号更容易输入、更容易阅读、更简洁。

作为在引入点表示法(在 Objective-C 2.0 中)之前一直在编写 Objective-C 的人,我可以理解双方的论点,但我自己更喜欢使用点表示法。就是说,我认为对于开始使用 Objective-C 的人来说,理解点符号语法在编译时转换为标准访问器方法调用是很重要的。我认为 Big Nerd Ranch 这本书的作者可能有类似的态度,这也是他们决定在书中使用括号符号的重要原因。

所以简而言之,做你最喜欢的事。两者都是有效的,两者之间的选择本质上是风格问题。无论您选择哪种,请确保您了解两种样式都会生成等效的编译代码。

编辑:我忘了回答关于将点表示法转换为括号语法的问题。你很接近,但你写的是错误的,实际上不会编译。应该是:[[self display] setText:[[[self display] text] stringByAppendingString:digit]]。如果我写它,我会把它分成两行(好吧,我真的会使用点符号):

NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];

编辑2:我写这个答案已经3年多了。我只是想指出,这些天来,更多的 Apple 框架类已经将以前的常规方法转换为 @properties(例如-[NSArray count]),大概是为了更好的 Swift 互操作。这使我比以前更自由地使用点符号。

于 2012-07-13T16:19:49.740 回答
12

这是我的看法:

处理属性时,应始终使用点表示法。不仅写起来更快(self.foo 的字符比 [short foo] 少),而且更重要的是它使链式消息更容易理解。例如:

self.myTextField.text.length

比更容易理解

[[[self myTextField] text] length]

此外,它降低了您弄乱标点符号的可能性(确保您有正确数量的括号通常很痛苦)。

但是,正如其他人在上面所说的那样,最终这是个人意见。

于 2012-07-13T17:01:41.437 回答
7

我知道这是一篇旧帖子,但我想添加一个更现代的答案。

随着 swift 的发布和我们最喜欢的语言即将消亡,偏好应该倾向于点符号。所有 iOS 框架都更新了它们的 API 以支持点表示法(更喜欢标头中的只读属性而不是 getter)。这使得最终向 swift 的转换更加流畅。

需要明确的是,对于要公开 getter 和/或 setter 的实例,最好使用属性。幸运的是,Xcode 的现代 Objective-c 迁移工具将为您完成大部分工作。

于 2014-08-08T13:29:43.733 回答