2012-02-24 5 views
1

Я видел доступ к переменной в iphone sdk с -> или. символ. Какой из них лучший? В чем разница между self.variable и self-> variable?В чем разница между self.variable и self-> variable?

+0

Для объяснения того, что происходит при использовании точечной нотации и свойств с синтезом, см. [This] (http://stackoverflow.com/questions/8576593/objective-c-memory-management-of-instance-members/ 8576760 # 8576760) –

ответ

3

Точка-обозначение проходит через аксессор, стрелка обозначение идет непосредственно к переменному экземпляру. Попробуйте этот код:

@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 
+0

+1: очень хорошее объяснение, спасибо! –

+0

Что такое журнал, пожалуйста? – nameless

+0

«Журнал» записывает на консоль с помощью 'NSLog'. – zoul

0

Точечная нотация будет использовать свойства методов getter/setter - так зависит от того, что вы заявили, что переменная может быть сохранена или назначена, или вы можете указать свои собственные методы getter/setter для выполнения дополнительной работы всякий раз, когда это свойство установлено.

self-> указатель ссылки на себя. Который обращается к var напрямую. Я лично не вижу смысла использовать его в obj c, поскольку только «var on its own» будет иметь тот же эффект.

пс. Есть много других вопросов/ответов на этот точный вопрос здесь, на SO.

This один

This один

0

self.var означает, что вы объявляете свойство для вар, предположим, как:


@property (nonatomic, retain) id var; 

это на самом деле вызывает [само вар] для self.var.

В то время как self->var просто получает значение члена self, например, на C++ или еще.

Смежные вопросы