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

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

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

  • 相关阅读:
    Lucas定理及其应用
    HDU 5044 TREE
    HDU 5033 Building
    Codeforces Round #238 (Div. 1)
    hdu 4878 ZCC loves words AC自动机+中国剩余定理+快速幂
    HDU 5015 233 Matrix
    HDU 5008 Boring String Problem
    ZOJ 3817 Chinese Knot
    使用AutoMapper
    多租户概念以及FreeLink多租户设计思想
  • 原文地址:https://www.cnblogs.com/widgetbox/p/shisanshu.html
Copyright © 2011-2022 走看看