Objective-c点符号或方括号表示法中首选的是什么?

时间:2012-07-13 16:12:21

标签: objective-c notation

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

请您解释一下如何将此代码转换为括号表示法?

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

据我所知,应该是:

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

这是对的吗?

3 个答案:

答案 0 :(得分:50)

这是个人选择的问题。有些人认为点符号使得不清楚消息被发送(方法被调用),因为它看起来就像C风格的结构元素访问。论证的另一面是点符号更容易键入,更易于阅读,更简洁。

作为一个在编写点符号之前编写Objective-C的人(在Objective-C 2.0中),我可以理解双方的论点,但我更喜欢自己使用点符号。也就是说,我认为对于从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互操作。这让我比以前更加自由地使用点符号。

答案 1 :(得分:10)

以下是我的意见:

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

self.myTextField.text.length

更容易理解

[[[self myTextField] text] length]

此外,它使你不太可能搞乱标点符号(确保你有正确数量的括号通常是一种痛苦)。

但是,正如其他人在上面所说,最终是个人观点。

答案 2 :(得分:6)

我知道这是一个老帖子,但我想补充一个更现代的答案。

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

要明确的是,首选的是您公开getter和/或setter的实例的属性。幸运的是,Xcode的modern objective-c migration tool 将为您完成大部分工作。