Сеттер и геттер для атомного свойства
как выглядит автогенератор и сеттер для следующего значения свойства?
... in .h
@interface MyClass : NSObject {
@private
NSString *_value;
}
@property(retain) NSString *value;
... in .m
@synthesize value = _value;
что, если я изменю свойство как
@property(retain, readonly) NSString *value;
В частности, меня интересует атомная часть истории, плюс сохранившийся и, если возможно, подробный код будет более понятным относительно того, что именно происходит за сценой.
Ответы
Ответ 1
Они выглядели бы так:
- (NSString*) value
{
@synchronized(self) {
return [[_value retain] autorelease];
}
}
- (void) setValue:(NSString*)aValue
{
@synchronized(self) {
[aValue retain];
[_value release];
_value = aValue;
}
}
Если вы измените свойство на readonly, сеттер не будет сгенерирован. Геттер будет идентичным.
Ответ 2
если вы не укажете readonly
с объявлением свойство, тогда компилятор будет генерировать getter и сеттер и будет таким, как показано ниже.
setter ---> setValue:
[self setValue:@"setter"];
getter -----> Value,
NSString* myValue = [self Value];
Compilar не будет выполнять функцию setter для свойства, которое вы объявили с помощью readonly
.
atomic
являются потокобезопасными, тогда как nonatomic
не является.