Допустим, у меня есть класс. Я хотел бы объявить свойство следующим образом:
- Из-за пределов класса он должен быть доступен только для чтения при программном доступе ;
- Должно быть возможно установить значение из Interface Builder с помощью розетки;
- (Внутри класса это должно быть доступно для записи, но я знаю, как это сделать).
«Решение», которое я нашел, - написать одноразовый сеттер:
- (void) setA: (ClassA *)a {
if (aHaveBeenSet)
return;
else {
// do what a setter have to do
aHaveBeenSet == YES;
}
}
Но этот сеттер все еще может быть вызван из кода (хотя только один раз в силе), так что это не совсем решение.
Другой способ - пометить ivar как IBOutlet и сделать свойство readonly
следующим образом:
@interface MyClass : NSObject {
IBOutlet ClassA *a;
}
@property (readonly) ClassA *a;
@end
Но согласно этому ответу , это плохой стиль и делает управление памятью неясным.
Есть идеи?