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


    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.总结

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

  • 相关阅读:
    2019-9-2-一个好的程序员
    2019-9-2-一个好的程序员
    2018-2-13-wpf-GifBitmapDecoder-解析-gif-格式
    2018-2-13-wpf-GifBitmapDecoder-解析-gif-格式
    2019-5-31-SharpDx-进入全屏模式
    2019-5-31-SharpDx-进入全屏模式
    2019-8-31-dotnet-删除只读文件
    2019-8-31-dotnet-删除只读文件
    PHP mysqli_real_connect() 函数
    PHP mysqli_query() 函数
  • 原文地址:https://www.cnblogs.com/widgetbox/p/shisanshu.html
Copyright © 2020-2023  润新知