引言
在对于自定义的对象支持copy功能,也就是我们要给自定义的对象发送copy message,那我们就要手动实现NSCopying协议。在项目开发中我们如果对某个字典或者数组对象进行了一次mutbleCopy其实系统默认的调用了如下API:
|
|
浅拷贝
如果你现在通过retain或者alloc创建并持有了一个对象,浅拷贝就是重新拷贝了一个指向当前这个对象的指针,此时就有两份指针同时指向当前对象的内存区域,即指向同一块内存区域,对象只有一份并没有发生任何变化。
|
|
深拷贝
深拷贝拷贝当前指针指向的对象,系统会随机给拷贝的对象重新分配一块内存,深拷贝以后,两份对象的内存地址不一样,指针指向也不一样。深拷贝会把当前容器中的对象重新拷贝一份放到另一个容器中,拷贝后的指针指向新的容器。
|
|
小结
1、对不可变的对象进行mutableCopy操作,是进行了一次深拷贝,返回的对象是可变的对象。
2、对不可变的对象进行copy操作,进行了一次浅拷贝,返回一个不可变的对象。
3、对可变得对象进行copy,进行了深拷贝,返回的是可变的对象。
4、 对可变的对象进行了一次mutableCopy,是进行了一次深拷贝, 返回的对象是一个可变的对象。
5、想要让自定义的对象支持copy和mutableCopy那么就要对应实现NSCopying协议,和NSMutableCopying协议。
retain和copy的区别:
|
|