Objective-C:消息语法与点语法;有什么区别?

4
如果我使用@synthesize foo;,以下两种方式有什么区别:
// message syntax
[myObj setFoo:5];
[myObj foo];

并且

// dot syntax
myObj.foo = 5;
myObj.foo;

我喜欢点语法的一致性,但我不知道它是否会引起我应该关注的问题。 任何额外的信息都将是很大的帮助。
2个回答

11

使用点语法和消息语法没有功能上的区别。

我认为使用消息语法更符合整个语言的一致性,而点语法只是为那些从使用它的语言(比如Java)过来的程序员提供方便。

我所要求的是:无论你选择哪种方式,请保持一致。 不要混用单属性设置器!(多参数设置器显然是豁免的)。


2
同意。坚持使用其中之一即可。我更喜欢使用点语法,因为它告诉我我正在做一些可能会保留或复制对象的事情。 - Stephen Furlani
我赞同!但我也尝试使用点表示法,这样我一眼就能看出成员是定义为属性还是方法。 - jtalarico
“不要混搭”这种说法有点毫无意义。如果您使用点符号表示法来设置所有属性,然后又必须添加一个接受两个参数的setter,那么该怎么办呢? - w-m
@w.m 那么你别无选择,只能混合使用。这仅适用于设置单个属性 - 不适用于多参数设置器。 - Jacob Relkin
2
我认为点语法是一个很大的错误。它污染了语法并且让人们感到困惑。 - JeremyP

3

它们是相同的。

点语法用于表示访问 @property,您也可以通过以下方式访问:

[myObject setValue: [NSNumber numberWithIntValue:5] forKey:@"foo"];
[myObject valueForKey:@"foo"];

但本质上这些调用是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接