我只是想知道它们之间的区别是什么:
[MyClassInstance myMethodName];
MyClassInstance.myMethodName;
MyClassInstance->myMethodName;
答案 0 :(得分:3)
假设MyClassInstance
是某个对象类型的变量......
答案 1 :(得分:1)
[MyClassInstance myMethodName];
被称为消息传递和
MyClassInstance.myMethodName;
被点运算符称为访问,就像在其他语言中一样。 两者都是访问属性和方法的技术,但消息传递是更现代的方法,更真实。因为Objective-C使代码标准易于理解,消息传递技术就像现实世界的命令来做一些工作。例如 [汽车驾驶] [转弯] 虽然点符号与更多的编程世界而不是现实世界相似。目标-c点符号是一种语法糖,它被转换为正常的消息传递,所以在引擎盖下没有任何改变,并且在运行时没有任何区别。点符号绝对不比消息传递快。
点符号利弊
<强>优点强>
可读性:点符号比嵌套括号按摩传递更容易阅读 它简化了与属性和属性的交互:使用点符号表示属性,使用消息符号表示方法,可以在synthax级别实现状态和行为的分离 可以使用复合赋值运算符(1)。 使用@property和点符号编译器为您做了很多工作,它可以在获取和设置属性时为良好的内存管理生成代码;这就是苹果公司自己的官方指南建议点符号的原因。
<强>缺点强>
只允许使用点表示法来访问声明的@property 由于Objective-C是一个高于标准C(语言扩展)的层,因此点符号并不能确定所访问的实体是对象还是结构。通常,它看起来像是在访问结构的属性。 使用点符号调用方法会丢失命名参数的可读性优势 当混合消息符号和点符号看起来像是用两种不同的语言编码时
答案 2 :(得分:-3)
两者都是一样的。这是一个选择和可读性的问题。