Преимущество наличия другого имени
для ивара, чем для свойства
что вы можете легко увидеть в коде
когда вы получаете доступ к одному или
другое - Андре К
Я не могу найти кнопку «Комментарий», поэтому мне нужно опубликовать «ответ».
Просто хотел расширить комментарий Андре - зная, когда вы используете синтезированные свойства против переменной vanilla, вы знаете (особенно в случае с установщиками), когда переменная сохраняется / копируется / освобождается автоматически благодаря вашему хорошему установщику против манипулирования рукой.
Конечно, если вы все делаете правильно, вам, вероятно, не понадобится помощь установщика для правильного сохранения / освобождения объектов! Но могут быть и другие сценарии, в которых может быть полезна ссылка на ваши ивары как self.ivar
вместо _ivar
, например, когда вы используете собственные установщики / получатели вместо синтезированных по умолчанию. Возможно, каждый раз, когда вы изменяете свойство, вы также хотите сохранить его в NSUserDefaults. Поэтому у вас может быть такой код:
@interface SOUserSettings : NSObject {
BOOL _autoLoginOn;
}
@property (nonatomic, assign) BOOL autoLoginOn;
@end
@implementation SOUserSettings
@synthesize autoLoginOn = _autoLoginOn;
- (void)setAutoLoginOn:(BOOL)newAutoLoginOnValue {
_autoLoginOn = newAutoLoginOnValue;
[[NSUserDefaults standardUserDefaults] setBool:_autoLoginOn forKey:@"UserPrefAutoLoginOn"];
}
@end
Примечание: это просто иллюстративный код, с ним может быть что-то не так!
Итак, теперь в вашем коде, если у вас есть строка, которая говорит _autoLoginOn = YES
- вы знаете, что она не будет сохранена в NSUserDefaults, тогда как если вы используете self.autoLoginOn = YES
, вы точно знаете, что произойдет.
Разница между _autoLoginOn
и self.autoLoginOn
не просто семантическая.