Назначение переменной члена Objective C? - PullRequest
3 голосов
/ 28 декабря 2010

У меня есть классjective-c с переменными-членами. Я создаю геттеры и сеттеры для каждого. В основном для учебных целей. Мой сеттер выглядит следующим образом:

- (void) setSomething:(NSString *)input {
 something = input;
}

Однако в C ++ и других языках, с которыми я работал в прошлом, вы можете ссылаться на переменную-член с помощью указателя this, например this->something = input. В объективе-c это известно как self. Поэтому мне было интересно, возможно ли что-то подобное в объективе-c? Примерно так:

- (void) setSomething:(NSString *)input {
 [self something] = input;
}

Но это вызвало бы геттера на something. Так что я не уверен. Итак, мой вопрос:

Есть ли способ, которым я могу выполнить назначение, используя собственный указатель?

Если так, то как?

Это хорошая практика или это зло?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 28 декабря 2010

Да, он использует тот же синтаксис, что и C ++, с self вместо this:

self->something = input;
2 голосов
/ 28 декабря 2010

Вы эффективно используете "себя" неявно, когда используете ...

something = input;

... если нет локальной переменной "что-то".(т.е.: действительно нет необходимости добавлять явное «я», а люди обычно этого не делают.)

Тем не менее, ваш пример кода не сохраняет ввод, поэтому он, вероятно, не собираетсяделать то, что вы ожидаете (ну, ненадолго, без сбоев в случае NSString).

Таким образом, если вы действительно хотите написать свои собственные установщики (Objective-C свойство / синтез настроено на лот меньше хлопот), вам нужно использовать что-то вроде:

- (void) setSomething:(NSString *)input {
    if(something != input) {
        [input retain];
        [something release];
        something = input;
    }
}
...