ОК, чтобы присвоить свойство, которое только для чтения?
Если вы @synthesize coordinate;
, то поддержка ivar будет называться coordinate
. Если свойство автосинхронизировано, оно будет называться _coordinate
.
Если вы намерены назначить основную переменную экземпляра в инициализаторе, это нормально (например, coordinate = c
или _coordinate = c
).
Если вы хотите установить его с помощью сеттер (например [self setCoordinate:c]
или self.coordinate = c;
вам необходимо реализовать связующий самостоятельно или синтезировать его определение (например, путем объявления READWRITE собственности в своем классе продолжение).
не должны скоординировать у себя перед ним? (например, self.coordinate = с).
нет, it should not. Использование прямого доступа в частично построенном состоянии, например, элемента инициализатор или -dealloc
.
Учитывая свойства:
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy, readwrite) NSString * title;
Ваш инициализатор должен принять форму:
- (id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString *)t
{
self = [super init];
if (self)
{
_coordinate = c;
_title = t.copy; // note: copy/ownership semantics match property declaration
}
return self;
}
@end
Если у вас есть свойство readonly, вы не можете назначить ему какую-либо вещь, компилятор даст ошибку в этом случае. – Suryakant
Вы должны получить проблему с компиляцией при назначении на чтение, установлено ли значение readwrite в другом месте? Вы синтезируете? – Wain
@ Wain: да, я синтезировал. Я не получаю проблемы с компилятором –