[英]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.