在阅读一些我第一次发现“结构运算符”的教程时,我读到它用于引用实例变量。
-(void)setNumber:(int)n{
self.number = n;
}
-(void)setNumber:(int)n{
self->number = n;
}
我的疑问是:它到底在做什么?我什么时候使用它?为什么我更喜欢它而不是点符号?
在阅读一些我第一次发现“结构运算符”的教程时,我读到它用于引用实例变量。
-(void)setNumber:(int)n{
self.number = n;
}
-(void)setNumber:(int)n{
self->number = n;
}
我的疑问是:它到底在做什么?我什么时候使用它?为什么我更喜欢它而不是点符号?
Objective-C 中的点语法只是语法糖,它被编译器替换为方法调用。->
取消引用指针并直接访问成员,没有方法调用。
在 Objective-C 方法调用中,你不需要说self->foo
,如果你的类有一个名为foo
的实例变量,编译器会推断self->
它的一部分。正因为如此,虽然它并非完全闻所未闻,但->
与 Objective-C 对象一起使用是比较少见的。
箭头->
运算符直接访问实例变量,这通常是您不想要的,因为它违反了封装并规避了访问器方法(这可能是问题的潜在根源,例如 KVO 不工作或某些预期的副作用未发生)。
相反,您应该几乎总是使用.
,因为它使用 getter 和 setter 访问属性。