Objective c 如何在圆弧中复制对象
现在它在ARC中没有“复制”属性,所以当我想要复制对象时应该怎么做? 然后我编写了一个测试代码: 测试hObjective c 如何在圆弧中复制对象,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,现在它在ARC中没有“复制”属性,所以当我想要复制对象时应该怎么做? 然后我编写了一个测试代码: 测试h @property (strong, nonatomic) NSMutableString *str1; @property (strong, nonatomic) NSMutableString *str2; test.m self.str1 = [[NSMutableString alloc] initWithString:@"Hello"]; self.str2 = [self.st
@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:'
那么,我应该怎么做呢?
copy
应该始终返回对象的不可变副本,mutableCopy
(如果可用)应该始终返回可变对象,而不管接收者是可变的还是不可变的。这样,您可以确保当您请求副本时,它将是不可变的,当您请求可变副本时,它将是可变的
这一概念已经存在多年,并不是ARC特有的。ARC只是处理对象的内存管理,而不是它们的易变性。copy
应始终返回对象的不可变副本,mutableCopy
(如果可用)应始终返回易变对象,无论接收者是可变的还是不可变的。这样,您可以确保当您请求副本时,它将是不可变的,当您请求可变副本时,它将是可变的
这一概念已经存在多年,并不是ARC特有的。ARC只是处理对象的内存管理,而不是对象的易变性。您是否尝试过使用mutableCopy
而不是copy
?是否[-NSMutableString copy]
真的返回不可变字符串?!很有效,谢谢!这是我在ARC中的粗心:)@noa:是的,copy
总是给你一个不可变的版本。你试过用mutableCopy
而不是copy
吗?[-NSMutableString copy]
真的返回一个不可变的字符串吗?!很有效,谢谢!是我的粗心:)@noa:是的,copy
总是给你一个不变的版本。