我应该何时使用复制而不是使用保留?我没理得。
答案 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
的基础值。同样的事情是NSArray
和NSMutableArray
,除了数组上的副本只是将所有指针引用复制到一个新数组,但会阻止删除和添加条目。