原子属性的setter和getter

时间:2011-12-05 08:11:56

标签: objective-c properties atomic getter-setter

自动生成的getter和setter对于以下属性值是什么样的?

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

@property(retain) NSString *value;

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

如果我将属性更改为

,该怎么办?
@property(retain, readonly) NSString *value;

具体而言,我对故事的原子部分感兴趣,加上保留,如果可能的话,详细的代码将更清楚地说明幕后发生了什么。

2 个答案:

答案 0 :(得分:24)

它们看起来像:

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

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

如果将属性更改为只读,则不会生成任何setter。吸气剂将是相同的。

答案 1 :(得分:-3)

如果您未使用属性声明指定readonly,则编译器将生成 getter setter ,如下所示

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

getter -----> Value,

NSString* myValue =  [self Value];

Compilar不会为您使用readonly声明的属性生成 setter 函数。

atomic是线程安全的,而nonatomic则不是。