点表示法与方法表示法

Dar*_*iss 5 objective-c ios ios5

我正在深入研究iOS编程,而我很难理解Dot Notation和Method Notation.

据我所知,Dot Notation可用于在属性上调用setter/getter,并且写入/读取更清晰.方法表示法用于向对象发送消息以操纵它们等.

有人可以给我一个简单的解释,为什么以下两个语句本质上是不同的,一个将编译,但另一个将由于语法错误而失败.

- (IBAction)digitPressed:(UIButton *)sender 
{
   NSString *digit = [sender currentTitle];

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

}
Run Code Online (Sandbox Code Playgroud)

谢谢.

jam*_*ack 12

您正在使用新语法使用旧语法的有趣时间进入Objective-C开发.Dot语法是语法糖,在某些情况下你可以使用它,但你不应该.

以下是无效的语法.你使用冒号的任何东西(除了setter或getter),你都不会使用点符号.

self.display.text = self.display.text.stringByAppendingFormat:digit;
Run Code Online (Sandbox Code Playgroud)

另外,你会使用stringByAppendingString,而不是stringByAppendingFormat

您使用点表示法来访问变量,而不是用于调用具有效果的操作.

正确: self.foo.attributeOfMyClass

不正确: self.foo.downloadSomethingFromAWebsite

确保你总是使用点表示法来访问属性值和你总是使用括号标记(即使你不必须)调用操作方法,你的代码将在一目了然更加清晰.

  • 这并不完全正确 - 注意`[foo setBar:3];`涉及一个冒号,但可以用点符号表示为`foo.bar = 3;`.重要的区别是点符号*可能*用于访问器(获取或设置属性的方法),但不用于其他任何东西.另请注意,如果它让您感到困惑,则根本不需要使用它. (2认同)

and*_*n22 5

点符号只是一种特定方法的简写 - 即访问者.您可以在以下情况下使用它:

  1. 设置属性时:foo.bar = 3;相当于[foo setBar:3];.
  2. 申请财产时:除上述财产外,任何情况foo.bar均相当于[foo bar].

点符号只是速记 - 它与属性的关系没有任何魔力.理论上你可以使用点符号来发送任何不带参数的消息(foo.doSomething),但这样的风格非常非常糟糕,因为点符号用于属性.另请注意,如果点符号与方括号在您学习时让您感到困惑,那么完全避免使用点符号是完全有效的选择.如果您愿意,它只是您可以用于访问者的一种捷径.