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