今天写代码过程中遇到一个头疼的问题:可变数组经过深拷贝之后,变动新数组里面的元素,原来的数组也会跟着变。
做了一下实验,得到如下结论:
当数组元素是自定义类的时候,不管深浅拷贝,数组里面的元素地址是不变的。
DPNTextContent *content1 = [[DPNTextContent alloc] init];
content1.content = @"1";
DPNTextContent *content2 = [[DPNTextContent alloc] init];
content1.content = @"2";
DPNTextContent *content3 = [[DPNTextContent alloc] init];
content1.content = @"3";
NSMutableArray *arr1 = [NSMutableArray arrayWithObjects:content1,content2,content3, nil];
NSMutableArray *arr2 = [NSMutableArray arrayWithArray:arr1];
DPNTextContent *ccc = [arr2 lastObject];
ccc.content = @"999";
NSLog(@"%@,%@",arr1,arr2);
这个在编程中得小心了。最后以元素替换的方式达到了目的。
附上一个关于讲解深浅拷贝的文章,特别详尽:https://www.zybuluo.com/MicroCai/note/50592