自动生成的getter和setter对于以下属性值是什么样的?
... in .h
@interface MyClass : NSObject {
@private
NSString *_value;
}
@property(retain) NSString *value;
... in .m
@synthesize value = _value;
如果我将属性更改为
,该怎么办?@property(retain, readonly) NSString *value;
具体而言,我对故事的原子部分感兴趣,加上保留,如果可能的话,详细的代码将更清楚地说明幕后发生了什么。
答案 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
则不是。