现在它没有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:'
那么,我该怎么办?
答案 0 :(得分:6)
copy
应始终返回对象的不可变副本,mutableCopy
(如果可用)应始终返回可变对象,无论接收方是可变的还是不可变的。通过这种方式,您可以确定当您要求copy
时 将不可变,当您要求mutableCopy
时将可变的。
这个概念已存在多年,并不是针对ARC的。 ARC只处理对象的内存管理,而不是它们的可变性。