Дальнейшее уточнение _property после атрибута readonly?
При установке атрибута readonly в разделе интерфейса это "отключает" метод установки для свойства. Мне нужно немного разъяснений с:
- В чем смысл свойства readonly, если мы можем просто установить его, используя _propertyName?
Когда использовать _propertyName, если наше свойство readwrite?
Также я понимаю, что мы используем методы установки для степени абстракции, а не просто присваиваем значение, используя _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 ответ
Дело в "инкапсуляции". Никакие другие файлы не смогут напрямую установить свойство. Свойство может быть установлено только из данного файла, например, с помощью
init
или используя специализированный метод.Большинство людей скажут вам, что вы должны использовать
_property
непосредственно только вinit
метод,dealloc
(если вы не используете ARC) и, конечно, если вы реализуете свой собственный установщик и получатель. Даже если собственность объявлена какreadonly
обычно ты это заявляешьreadwrite
в расширении класса. Поэтому он останетсяreadonly
для других файлов, но это будетreadwrite
для файла реализации (класса), который объявляет это.Многие причины, например "наследование" - сеттеры могут быть переопределены. За
copy
свойства, копирование обрабатывается установщиком. С MRC (не ARC), сеттеры еще более важны (они обрабатывают удержания и освобождения).