【发布时间】:2011-01-02 09:27:31
【问题描述】:
这两者有什么区别?
@property (nonatomic, retain)
@property (nonatomic, copy)
这样的其他类型是什么?
【问题讨论】:
标签: iphone objective-c properties
这两者有什么区别?
@property (nonatomic, retain)
@property (nonatomic, copy)
这样的其他类型是什么?
【问题讨论】:
标签: iphone objective-c properties
使用retain相当于这个方法:
- (void)setMyObject:(id)object {
myObject = [object retain];
}
使用copy是这样的:
- (void)setMyObject:(id)object {
myObject = [object copy];
}
主要区别在于现在有同一个对象的两个副本。现在,如果您更改类中的实例变量(例如将@"A" 更改为@"B"),原始对象将保持不变(仍将是@"A")。
【讨论】:
作为一般规则,使用:
@property(nonatomic, copy)
..对于 NSString 属性和 this 对于所有其他对象属性:
@property(nonatomic, retain)
【讨论】:
对于类型是符合 NSCopying 协议的不可变值类的属性,您几乎总是应该指定 **
复制
** 在您的@property 声明中。指定**
保留
** 在这种情况下你几乎不会想要。
因为在几乎所有情况下,您都希望防止在其背后改变对象的属性,因此您应该将表示它们的属性标记为副本。 (如果您自己编写 setter 而不是使用 @synthesize,您应该记住实际使用 copy 而不是在其中保留。)
【讨论】: