我很困惑使用哪个以及何时使用.有经验法则吗?大多数情况下可以使用它们吗?任何特殊规则?
@property (nonatomic, retain) NSDate *theDateFromPicker;
@property (nonatomic, copy) NSDate *theDateFromPicker;
Run Code Online (Sandbox Code Playgroud)
在这种情况下哪个是最好的选择?
谢谢-Code
Rit*_*its 14
当您不希望对象被另一个对象修改时,您将需要使用副本.
一个很好的例子是NSString.假设你有这个代码:
@property (nonatomic, retain) NSString *aString;
// in some other class
NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"test"];
theObject.aString = mutableString; // theObject retains the mutable string
[mutableString setString:@"test2"];
Run Code Online (Sandbox Code Playgroud)
这里发生的是你将值"test"分配给aString,但随后它被外部修改并变为"test2",因为你保留了可变字符串.如果你已经设置copy,这不会发生,因为你正在制作一个可变字符串的副本.
NSDate是不可变的,我们目前没有可变子类.所以保留很好.复制也不会受到伤害,事实上我希望复制只是在这里交回相同的实例(再次保留).
在NSString上使用副本的原因是你可能会将一个NSMutableString传递给你的对象,而这可能会在你脚下发生变化.这不可能发生在这里.
| 归档时间: |
|
| 查看次数: |
4189 次 |
| 最近记录: |