self.variable和self-> variable之间有什么区别?

我已经看到使用 – >或在iphone sdk中访问变量。 符号。哪一个是最好的?self.variable和self-> variable之间的区别是什么?

点符号通过访问器,箭头符号直接进入实例变量。 试试这段代码:

@interface Foo : NSObject @property(assign, nonatomic) NSInteger bar; @end @implementation Foo @synthesize bar; - (void) setBar: (NSInteger) newBar { NSLog(@"Setting new bar."); bar = newBar; } - (id) init { self = [super init]; self->bar = 5; // doesn't log anything self.bar = 6; // logs return self; } @end 

点表示法将使用属性getter / setter方法 – 因此取决于您声明的变量可以保留或分配的内容,或者您​​可以指定自己的getter / setter方法,以便在设置该属性时执行额外的工作。

self->是指向self的指针。 哪个直接访问var。 我个人认为在obj c中使用它没有意义,因为’var on it own’会产生同样的效果。

PS。 SO上有关于这个确切主题的大量其他问题/答案。

这个

这个

self.var表示你为var声明一个属性,假设如下:

 @property (nonatomic, retain) id var; 

它实际上称为self.var [self var]。

虽然self->var只是像在C ++中那样获取self实例的成员值。