Objective-C复制并保留

时间:2011-06-22 14:34:56

标签: objective-c copy retain

我应该何时使用复制而不是使用保留?我没理得。

3 个答案:

答案 0 :(得分:29)

如果要保证对象的状态,可以使用copy

NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];

此时b刚刚被第3行搞砸了。

NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];

在这种情况下,b是原始字符串,不会被第3行修改。

这适用于所有可变类型。

答案 1 :(得分:7)

保留:在已创建的对象上完成,只会增加引用次数。

复制 - 它会创建一个新对象,当创建新对象时,保留计数将为1。 希望这可以帮到你。

答案 2 :(得分:4)

当您不希望在不知情的情况下更改收到的值时,复制非常有用。例如,如果您有一个NSString的属性,并且您依赖该字符串一旦设置就不会更改,那么您需要使用副本。否则,有人可以向您传递NSMutableString并更改该值,该值又会更改NSString的基础值。同样的事情是NSArrayNSMutableArray,除了数组上的副本只是将所有指针引用复制到一个新数组,但会阻止删除和添加条目。