Ответ 1
Вы можете включить второе, личное объявление readwrite в расширение класса. Схема управления памятью для всех ссылок должна соответствовать IIRC, поэтому вы получаете глупость, как "readonly, сохраняете".
Я заметил, что некоторые примеры Apple включают модификаторы retain
и readonly
в свойствах. Какая точка включения retain
, если сеттер не генерируется при использовании модификатора readonly
?
Пример: @property (retain, readonly) NSString *title;
из примера AnimatedTableView.
Вы можете включить второе, личное объявление readwrite в расширение класса. Схема управления памятью для всех ссылок должна соответствовать IIRC, поэтому вы получаете глупость, как "readonly, сохраняете".
Или, более конкретно, (только для чтения, сохранения) позволяет создать такой шаблон:
foo.h:
@interface StuffHolder:NSObject
@property(readonly, retain) MyStuff *stuff;
@end
Foo.m:
@interface StuffHolder()
@property(readwrite, retain) MyStuff *stuff;
@end
@implementation StuffHolder
@synthesize stuff;
@end
Конечный результат - это свойство, которое открыто для чтения во время чтения в рамках реализации и для которого оба сборщика и получателя синтезируются автоматически компилятором.
Предупреждение может быть сгенерировано в случае отсутствия (readwrite, сохранения) переопределения в расширении класса - что-то похожее на statement without an effect
- но это будет более запутанным, чем полезным. Кроме того, в комбинациях есть множество различных случаев кросс, которые в равной степени гарантируют предупреждение, но на самом деле не указывают на фактическую проблему. Было принято решение в значительной степени принять различные шаблоны без жалоб ради простоты (поскольку они не являются ошибками).