如何在ARC中复制对象

时间:2012-05-17 03:28:20

标签: objective-c automatic-ref-counting

现在它没有ARC中的复制属性,所以当我想复制一个对象时该怎么做? 然后我写了一个测试代码:

test.h

@property (strong, nonatomic) NSMutableString *str1;
@property (strong, nonatomic) NSMutableString *str2;

test.m

self.str1 = [[NSMutableString alloc] initWithString:@"Hello"];
self.str2 = [self.str1 copy];
[self.str2 appendString:@"World"];
NSLog(@"str1:%@,str2:%@",self.str1,self.str2);

当我跑步时,它崩溃了:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'

那么,我该怎么办?

1 个答案:

答案 0 :(得分:6)

copy应始终返回对象的不可变副本,mutableCopy(如果可用)应始终返回可变对象,无论接收方是可变的还是不可变的。通过这种方式,您可以确定当您要求copy 将不可变,当您要求mutableCopy可变的。

这个概念已存在多年,并不是针对ARC的。 ARC只处理对象的内存管理,而不是它们的可变性。