嗨,我知道当使用箭头符号 () 访问 C 中的成员时,无需在每次需要访问对象时->
都使用星号和点 ( )。* .
self.myivar
但是在Objective-C中和之间有什么区别self->myivar
吗?我注意到它们都适用于我的情况,我将 myivar 声明为属性。
嗨,我知道当使用箭头符号 () 访问 C 中的成员时,无需在每次需要访问对象时->
都使用星号和点 ( )。* .
self.myivar
但是在Objective-C中和之间有什么区别self->myivar
吗?我注意到它们都适用于我的情况,我将 myivar 声明为属性。
但是在 Objective-C 中 self.myivar 和 self->myivar 之间有什么区别吗?
是的,有区别。假设这foo
是一个指向对象的指针:
foo->bar
相当于(*foo).bar
这里的点表示成员访问操作符获取实例变量bar
。
foo.bar
相当于[foo bar]
; 也就是说,它将消息发送-bar
到 指向的对象foo
。这可能只返回foo
'sbar
实例变量中的任何内容,但它可能会做其他事情。甚至可能没有一个名为bar
. -bar
但是,只要有一个名为 的方法foo.bar
是有效的。-setBar:
如果您将foo.bar
其用作作业的左侧,则还应该有一种方法,例如: foo.bar = baz;
.
请注意,虽然self
是 Objective-C 中的关键字,但它始终充当指向对象的指针。self
在访问属性或实例变量方面没有什么特别之处。我已使用foo
上面的对象指针的名称来证明属性/ivar 访问对任何对象指针的工作方式相同,但您可以替换self
上面foo
的名称。