Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-c点表示法或方括号表示法中,首选哪一种?_Objective C_Notation - Fatal编程技术网

在Objective-c点表示法或方括号表示法中,首选哪一种?

在Objective-c点表示法或方括号表示法中,首选哪一种?,objective-c,notation,Objective C,Notation,我在读一本书——大怪人牧场iOS编程。 它说不建议使用点符号,因为它会混淆代码。 我正在同时观看斯坦福大学的iOS编程课程,他在课程中广泛使用点符号。你推荐什么?我个人更倾向于使用括号符号 你能解释一下如何把这个代码转换成括号符号吗 self.display.text = [self.display.text stringByAppendingString:digit]; 据我了解,应该是: [[self display] setText]:[[[self display] text] str

我在读一本书——大怪人牧场iOS编程。 它说不建议使用点符号,因为它会混淆代码。 我正在同时观看斯坦福大学的iOS编程课程,他在课程中广泛使用点符号。你推荐什么?我个人更倾向于使用括号符号

你能解释一下如何把这个代码转换成括号符号吗

self.display.text = [self.display.text stringByAppendingString:digit];
据我了解,应该是:

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

这是正确的吗?

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

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

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

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

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

以下是我的观点:

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

self.myTextField.text.length

容易理解比简单

[[self myTextField]text]长度]

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


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

我知道这是一篇老文章,但我想补充一个更现代的答案

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


为了清楚起见,对于要公开getter和/或setter的实例,更倾向于使用属性。幸运的是,Xcode将为您完成大部分工作。

这主要是个人偏好的问题。+1,作为一个普通的Obj-C用户,我不知道我可以用几个点替换1000万个括号。我假设在大多数情况下它们都是结构访问。@Andrew Madsen我引用的代码正确吗?括号一。对不起,我没有回答你问题的那一部分!我已经编辑了我的答案。答案为+1,但imo点表示法表达能力稍差。乍一看,你无法分辨一行是在调用对象、设置属性还是在KVO/KVC中摆弄。@AndrewMadsen+1作为一个完全厌恶使用方括号在基于C的语言中执行方法调用的人,我尽可能使用点符号。尽管很有趣,
length
不是
NSString
上的
@属性有趣的是,链式属性的同一个例子通常用来指出,括号表示法可以让你更好地了解实际发生的事情。同意,但我们必须找出哪个是真正的属性,实际上,有趣的是,长度现在是NSString上的@属性:)有人很容易提出相反的观点:在Objective-C中使用括号可以更容易地区分这两种语言。这在很大程度上仍然是个人选择的问题,但我认为没有理由仅仅因为在Swift中使用了点符号就喜欢Obj-C中的点符号。Obj-C是一种不同的语言;它没有演变成Swift,也没有必要让你的Obj-C代码更为Swift-y。@Caleb所以你建议我们忽略Swift,保留旧的、用括号括起来的objective C语法?尽管所有的iOS框架都在向点属性过渡,但我不明白你为什么要刻意“与众不同”你的代码我的意思是,当你选择Objective-C风格时,不需要考虑Swift语法——让你的Obj-C代码看起来像Swift是没有好处的。@Caleb除了为使用Swift的人构建更好的API之外?也许我应该详细说明的是,我们应该开始审核我们的API,以更喜欢属性而不是getter。任何函数仍然需要使用括号
NSString *stringWithDigit = [[[self display] text] stringByAppendingString:digit];
[[self display] setText:stringWithDigit];