概述
浅拷贝:指针拷贝
深拷贝:内容拷贝
具体如图1所示
图1. 深拷贝与浅拷贝
本质
深拷贝和浅拷贝的本质是新的对象与原来的对象指针是否相同
开发过程中,会遇到两种类型:对象的拷贝,集合的拷贝
- 对象的拷贝:copy为浅拷贝,mutableCopy为深拷贝
- 集合的拷贝:copy为浅拷贝,mutableCopy也为浅拷贝,举例如下
NSArray *array = [obj1, obj2, obj3];
NSArray *arrayA = [array copy];
NSMutableArray *arrayB = [array mutableCopy];
其中arrayA 与 array指针相同,arrayB 与 array 虽然指针不同,但是 arrayB 中的obj1、obj2、obj3 等与 array 中的 obj1、obj2、obj3 指针相同,因此也算是浅拷贝,或者叫单层深拷贝
集合的深拷贝
要想实现集合的深拷贝,可以通过如下方法, initWithArray:copyItems:
第二项设为YES
NSArray *shallowCopyArray = [[NSArray alloc] initWithArray:someArray copyItems:YES];
用这种方法进行深拷贝,集合里的每个对象都会收到copyWithZone:
消息,如果集合中的对象遵循NSCopying协议,那么对象就会被深拷贝的新的集合中,如果对象没有遵循NSCopying协议就会报错
网友评论