[英]How to copy an object in ARC
现在它在ARC中没有copy属性,那么当我要复制对象时该怎么办? 然后我写一个测试代码:
测试
@property (strong, nonatomic) NSMutableString *str1;
@property (strong, nonatomic) NSMutableString *str2;
测试
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
(如果有)应始终返回可变对象,而不管接收者是可变对象还是不可变对象。 通过这种方式,你可以肯定,当你问一个copy
这将是不变的,当你问一个mutableCopy
这将是可变的。
这个概念已经存在了很多年,并且并不专门针对ARC。 ARC仅处理对象的内存管理,而不处理对象的可变性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.