Подтвердить что ты не робот

Сеттер и геттер для атомного свойства

как выглядит автогенератор и сеттер для следующего значения свойства?

... in .h
@interface MyClass : NSObject {
@private
    NSString *_value;
}

@property(retain) NSString *value;

... in .m
@synthesize value = _value;

что, если я изменю свойство как

@property(retain, readonly) NSString *value;

В частности, меня интересует атомная часть истории, плюс сохранившийся и, если возможно, подробный код будет более понятным относительно того, что именно происходит за сценой.

4b9b3361

Ответ 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 не является.