方法调用之间的区别

时间:2014-11-17 07:33:38

标签: objective-c syntax

我只是想知道它们之间的区别是什么:

  1. [MyClassInstance myMethodName];

  2. MyClassInstance.myMethodName;

  3. MyClassInstance->myMethodName;

3 个答案:

答案 0 :(得分:3)

假设MyClassInstance是某个对象类型的变量......

  1. 这是发送消息的语法。
  2. 这是如何访问一个属性。编译器将查找属性声明并在此处插入getter消息。
  3. 使用箭头操作符可以访问实例的ivars。没有消息被发送。

答案 1 :(得分:1)

[MyClassInstance myMethodName]; 

被称为消息传递和

MyClassInstance.myMethodName; 

被点运算符称为访问,就像在其他语言中一样。 两者都是访问属性和方法的技术,但消息传递是更现代的方法,更真实。因为Objective-C使代码标准易于理解,消息传递技术就像现实世界的命令来做一些工作。例如 [汽车驾驶] [转弯] 虽然点符号与更多的编程世界而不是现实世界相似。目标-c点符号是一种语法糖,它被转换为正常的消息传递,所以在引擎盖下没有任何改变,并且在运行时没有任何区别。点符号绝对不比消息传递快。

点符号利弊

<强>优点

可读性:点符号比嵌套括号按摩传递更容易阅读 它简化了与属性和属性的交互:使用点符号表示属性,使用消息符号表示方法,可以在synthax级别实现状态和行为的分离 可以使用复合赋值运算符(1)。 使用@property和点符号编译器为您做了很多工作,它可以在获取和设置属性时为良好的内存管理生成代码;这就是苹果公司自己的官方指南建议点符号的原因。

<强>缺点

只允许使用点表示法来访问声明的@property 由于Objective-C是一个高于标准C(语言扩展)的层,因此点符号并不能确定所访问的实体是对象还是结构。通常,它看起来像是在访问结构的属性。 使用点符号调用方法会丢失命名参数的可读性优势 当混合消息符号和点符号看起来像是用两种不同的语言编码时

答案 2 :(得分:-3)

两者都是一样的。这是一个选择和可读性的问题。