2

嗨,我知道当使用箭头符号 () 访问 C 中的成员时,无需在每次需要访问对象时->都使用星号和点 ( )。* .

self.myivar但是在Objective-C中和之间有什么区别self->myivar吗?我注意到它们都适用于我的情况,我将 myivar 声明为属性。

4

1 回答 1

9

但是在 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的名称。

于 2013-06-17T15:23:39.067 回答