В Objective-C геттеры и сеттеры вместе называются «аксессорами».Вам не нужно определять методы доступа для простых свойств.Определение свойства заставит компилятор генерировать методы доступа.Для более сложных свойств геттеры - это нулевые методы с обычно тем же именем, что и у свойства, а сеттеры - это унарные методы с добавлением «set» к имени.
Ваш пример будет реализован вручную как:
-(double)pBal {
return balance;
}
-(void)setPBal:(double)newBalance {
balance = newBalance;
}
Это эквивалентно тому, что генерируется:
@property (nonatomic,assign) double pBal;
...
@synthesize pBal=balance;
Настраиваемые средства доступа
Более сложные средства доступа, генерируемые компилятором, будут учитывать сохранение и синхронизацию.Я считаю, что
@property (retain) NSString* name;
...
@synthesize name;
будет генерировать средства доступа, подобные:
-(NSString*)name {
@synchronized(name) {
return [[name retain] autorelease];
}
}
-(void)name:(NSString*)aString {
@synchronized(name) {
if (name != aString) {
[name release];
name = [aString retain];
}
}
}
. Фактические средства доступа могут использовать блокировки, а не блоки @synchronized
, что может повлиять на рекурсивные свойства и исключения..
Средства доступа к именам
Правила именования по умолчанию для средств доступа исходят из кодирование значения ключа .Булевозначные геттеры обычно используют «is» в качестве префикса.Обратите внимание, что в этом отношении нет ничего особенного в логических значениях - ни язык, ни компилятор не заставляют методы "is ..." возвращать BOOL
- это просто вопрос соглашения.
-(BOOL)isReady {
return ready;
}
-(void)setReady:(BOOL)aBool {
ready = aBool;
}
Вы можете переопределить имена доступа по умолчанию с использованием атрибутов "getter" и "setter" в объявлении свойства.
@property (getter=dateAsString) NSString *displayDate;