Разница между _var и self.var - PullRequest
3 голосов
/ 16 июня 2011

Со всеми этими новыми ARC-компонентами (которые не подпадают под NDA…) кажется, что по умолчанию для работы со свойствами является установка свойства без и ivar в файле реализации явно, пока вы не синтезируете его с чем-то вроде :

@synthesize var = _var;

Какую наилучшую практику использовать для установки переменной? Я знаю разницу между var и self.var в том, что self.var использует точечную запись и использует метод установки var.

Является ли _var просто эквивалентом его настройки в заголовочных файлах, как в старые добрые времена? Откуда взялась эта практика предварительной окраски всего с подчеркиванием?

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

_var - это просто другое имя переменной экземпляра (вероятно, чтобы вы случайно не обратились к ней напрямую, когда намеревались использовать метод доступа). Он не имеет никакого особого значения в языке, кроме того, что является действительным именем ivar.

1 голос
/ 11 января 2018

Когда вы автоматически определяете @property, например: @property (nonatomic, strong) NSString *var;, Objective-C 2.0 и выше, с 2012 года @synthesize с этим свойством создает три вещи:

  • Базовая переменная экземпляра NSString *_var.
  • Метод получения базовой переменной экземпляра: -(NSString *)var {}
  • Метод установки базовой переменной экземпляра: -(void)setVar:(NSString *)newVar {}

Как правило, не рекомендуется напрямую обращаться или устанавливать базовую переменную экземпляра напрямую из-за путаницы с KVO и обхода побочных эффектов, которые могли быть помещены в методы получения или установки.

...