test.h@synthesize in Objective-c?
NSString *name;
@property(nonatomic,retain) NSString *name;
test.m
@synthesize name;
这里为什么要用非原子,为什么我们使用保留产权,.m文件 @synthesize?
请回答,
test.h@synthesize in Objective-c?
NSString *name;
@property(nonatomic,retain) NSString *name;
test.m
@synthesize name;
这里为什么要用非原子,为什么我们使用保留产权,.m文件 @synthesize?
请回答,
的nonatomic
意味着设置该属性是不是线程安全的,retain
意味着新的值会被保留(和旧的价值释放),以及@synthesize
实际创建所必需的属性的方法。在这种情况下,它评估如下:
- (NSString *)name {
// Method "name", returning content of variable "name".
return name;
}
- (void)setName:(NSString *)newName {
[newName retain];
[name release];
name = newName;
// Also some magic for KVO is added here.
}
非原子详细here描述。
保留意味着,当值被设置为大于零的任何其他属性被保留。还有其他选项,如复制和分配。通常,可复制的对象类型应使用复制,如NSString
。 赋值只需设置指针值。
@synthesize存根出来的getter和setter方法的属性,并以订单所需非原子和保留工作。
此外,确保,如果你使用保留或副本,你也发布在dealloc
方法的对象。
- (void)dealloc {
[name release];
[super dealloc];
}
'nonatomic'与线程安全无关。它只是意味着你将永远在线程环境中获得可行的价值。不保证是否正确(即原子性不是交易系统)。 – bbum 2010-11-03 06:23:06
好帖子,但是当你不需要时,为什么你要“复制”对象?特别是如果你使用不可变的对象(如NSString),复制只会浪费内存。到目前为止,我很少发现需要“复制”。 – DarkDust 2010-11-03 06:26:31
@DarkDust:每个NSMutableString都是一个有效的NSString。你不想意外地存储其中的一个,并让它在你的下面改变。大多数实现至少拷贝*的对象可能是可变的。因此,以这种方式声明所有属性是个好主意。而且,作为优化,NSString(不可变版本)只会在您将其复制时保留下来。 – Chuck 2010-11-03 06:33:29
您的标题与您的问题不符。 – DarkDust 2010-11-03 06:18:53