Когда использовать себя и когда использовать сохранить - PullRequest
0 голосов
/ 20 сентября 2010

я пробираюсь через книгу Apress "Beginning iPad Development" и заметил, что иногда, когда автор присваивает значения свойству, которое он будет использовать:

self.variable = value;

, а иногда -:

variable = [value retain];

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

@property (nonatomic, retain) TYPE variable;

Интересно, знает ли кто-нибудь, почему это сделано, чтобы помочь мне лучше понять

Спасибо, Уильям

Ответы [ 2 ]

3 голосов
/ 20 сентября 2010

Одно из мест, где вы используете вторую форму, - это если вы определяете свой собственный метод установки.Вы не можете назначить self.variable там, потому что вы будете вызывать сеттер рекурсивно.Например, это неправильно:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        self.variable = [value retain]; // WRONG! Calls 
                                        // [self setVariable:[value retain]]
    }
}

Это правильно:

-(void)setVariable:(TYPE*)value {
    if (value != variable) {
        [variable release];
        variable = [value retain];
    }
}

Помогает ли это?

1 голос
/ 20 сентября 2010

Они часто эквивалентны памяти. Компилятор превращает self.variable = value в [self setVariable:value], который затем вызывает сгенерированный установщик (если вы используете @synthesize) и сохраняет его для вас.

...