解决多个界面重复共用同一组数据导致数据同步改变(实现数据的完全深拷贝)

1.非模型数组数据处理

NSMutableArray * array1=[NSMutableArray arrayWithObjects: @"1",@"2",@"3",@"4",nil];
NSMutableArray * array2=[NSMutableArray arrayWithObjects: @"a",@"b",@"c",@"d",array1, nil];
NSMutableArray *array3 = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:array2]]; 
array1[2] = @"change";
NSLog(@"array3:%@",array3);   
NSLog(@"array2:%@",array2);

2.对于数组中存放数据模型的处理

解决方法:需要在model实现解档和归档方法的重写

- (void)encodeWithCoder:(NSCoder *)aCoder

{[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.phone forKey:@"phone"];
}


- (instancetype)initWithCoder:(NSCoder *)aDecoder
{self = [super init];
if (self) 
{self.name = [aDecoder decodeObjectForKey:@"name"];
self.phone = [aDecoder decodeObjectForKey:@"phone"];
}

3.总结

在一个界面可能会弹出多个相同的弹窗,数据模型是共用一个,但是当我们操作一个数据源的同时,其他弹窗的数据源也跟着改变,这是我们不想看到的,我们希望操作改变的数据可以相互独立,不会互相影响,但是又不想写不同的数据请求方法,这时候我们就需要操作同一组数据源,而普通的深拷贝只是单层深拷贝,数组元素的地址还是同一个,只有实现了上述方法,才能做到真正的数组元素深拷贝,实现数据独立

原文地址:https://www.cnblogs.com/widgetbox/p/shisanshu.html