Copy Copy Copy

说到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]];

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

详细参考

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 4,425评论 0 2
  • 前言 不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新...
    zyydeveloper阅读 8,771评论 4 35
  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 4,119评论 0 2
  • 一、从面向对象到Objective-C概览copy 1、面向对象: In object-oriented prog...
    adrian920阅读 4,106评论 0 3
  • 亲爱的无敌可爱的超级迷人的小萱萱: 今天天气不错,下着大雪。雪花飘落的样子让我想起了第一次和你相遇的日子,所以我爱...
    玛丽约阅读 2,823评论 4 4