Дальнейшее уточнение _property после атрибута readonly?

При установке атрибута readonly в разделе интерфейса это "отключает" метод установки для свойства. Мне нужно немного разъяснений с:

  1. В чем смысл свойства readonly, если мы можем просто установить его, используя _propertyName?
  2. Когда использовать _propertyName, если наше свойство readwrite?

  3. Также я понимаю, что мы используем методы установки для степени абстракции, а не просто присваиваем значение, используя _propertyName. Есть ли какая-либо другая причина НЕ использовать _propertyName?

Вот пример кода ниже. Спасибо.

Раздел интерфейса

@property (nonatomic, readonly) NSString *licensePlate;
@property (nonatomic, readonly) NSString *bodyColor;

Секция внедрения

-(id) initWithCarFeatures {
    self = [super init]
    if (self) {
        _licensePlate = @"XSHJDS8687";
        _bodyColor = @"blueColor";
    }
    return self;
}

1 ответ

Решение
  1. Дело в "инкапсуляции". Никакие другие файлы не смогут напрямую установить свойство. Свойство может быть установлено только из данного файла, например, с помощью initили используя специализированный метод.

  2. Большинство людей скажут вам, что вы должны использовать _property непосредственно только в init метод, dealloc (если вы не используете ARC) и, конечно, если вы реализуете свой собственный установщик и получатель. Даже если собственность объявлена ​​как readonlyобычно ты это заявляешь readwrite в расширении класса. Поэтому он останется readonly для других файлов, но это будет readwrite для файла реализации (класса), который объявляет это.

  3. Многие причины, например "наследование" - сеттеры могут быть переопределены. За copy свойства, копирование обрабатывается установщиком. С MRC (не ARC), сеттеры еще более важны (они обрабатывают удержания и освобождения).

Другие вопросы по тегам