сеттер и геттер для атомарного свойства - PullRequest
24 голосов
/ 05 декабря 2011

как выглядят получатель и установщик auto-gen для следующего значения свойства?

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

@property(retain) NSString *value;

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

что если я поменяю свойство на

@property(retain, readonly) NSString *value;

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

Ответы [ 2 ]

24 голосов
/ 05 декабря 2011

Они будут выглядеть примерно так:

- (NSString*) value 
{
    @synchronized(self) {
        return [[_value retain] autorelease];
    }
}

- (void) setValue:(NSString*)aValue
{
    @synchronized(self) {
        [aValue retain];
        [_value release];
        _value = aValue;
    }
}

Если вы изменяете свойство только для чтения, сеттер не генерируется.Геттер будет идентичным.

0 голосов
/ 05 декабря 2011

если вы не укажете объявление readonly со свойством , то Compiler создаст установщик getter и и будет выглядеть так, как показано ниже.

setter  ---> setValue:
[self setValue:@"setter"];

getter -----> Value,

NSString* myValue =  [self Value];

Compilar не будет производить функцию setter для свойства, которое вы объявили с помощью readonly.

atomic потокобезопасен, тогда как nonatomic - нет.

...