В чем разница между self.variable и self-> variable? - PullRequest
1 голос
/ 24 февраля 2012

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

Ответы [ 3 ]

3 голосов
/ 24 февраля 2012

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

@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 голосов
/ 24 февраля 2012

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


@property (nonatomic, retain) id var;

это фактически вызывает [self var] для self.var.

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

0 голосов
/ 24 февраля 2012

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

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

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

Это один

Это один

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...