2

在阅读一些我第一次发现“结构运算符”的教程时,我读到它用于引用实例变量。

-(void)setNumber:(int)n{
   self.number = n;
}

-(void)setNumber:(int)n{
   self->number = n;
}

我的疑问是:它到底在做什么?我什么时候使用它?为什么我更喜欢它而不是点符号?

4

2 回答 2

4

Objective-C 中的点语法只是语法糖,它被编译器替换为方法调用。->取消引用指针并直接访问成员,没有方法调用。

在 Objective-C 方法调用中,你不需要说self->foo,如果你的类有一个名为foo的实例变量,编译器会推断self->它的一部分。正因为如此,虽然它并非完全闻所未闻,但->与 Objective-C 对象一起使用是比较少见的。

于 2013-09-16T13:52:23.197 回答
0

箭头->运算符直接访问实例变量,这通常是您不想要的,因为它违反了封装并规避了访问器方法(这可能是问题的潜在根源,例如 KVO 不工作或某些预期的副作用未发生)。

相反,您应该几乎总是使用.,因为它使用 getter 和 setter 访问属性。

于 2013-09-16T13:53:15.613 回答