Copy Copy Copy

作者: 浅y | 来源:发表于2018-02-26 17:37 被阅读23次

    说到Copy 大多会想到浅复制(指针复制),深复制(内容复制)。
    看一张图:


    1798226-449ac4732602184c.png

    你会发现对于集合类型,深复制那写的是单层或者完全,这就有一个区分:

    在OC中,当你对一个集合对象做深复制时,这个深复制只是单层的,集合内的元素对象其实还只是引用,并不是每一层都是深复制,这一情况,苹果定义为单层深复制(one-level-deep copy)。只有对集合内的每一层都去做深复制,才能够称为完全深复制。

    代码验证这一点,平时代码:

    NSArray *array = @[@[@"a", @"b"], @[@"c", @"d"];
    NSArray *copyArray = [array copy];// 浅复制
    NSMutableArray *mCopyArray = [array mutableCopy];// 单层深复制
    
    NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
    NSArray *copyArray = [array copy];// 单层深复制,返回不可变对象
    NSMutableArray *mCopyArray = [array mutableCopy];// 单层深复制
    

    那如果要做完全深复制该怎么做呢?(已经验证)
    一种方式为:

    NSDictionary shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];
    
    

    另外一种为归档和解档(没验证)

    NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
    
    

    所以对于 如果是集合是内容复制的话,集合里面的元素也是内容复制么?这个问题也就有了答案了。

    详细参考

    相关文章

      网友评论

        本文标题:Copy Copy Copy

        本文链接:https://www.haomeiwen.com/subject/wdwyxftx.html