copy特点iOS开发iOS Developer

OC 语言的深拷贝和浅拷贝的区别

2016-08-11  本文已影响159人  碧霄问鼎

OC 语言的深拷贝和浅拷贝的区别:有没有产生新对象,即开辟新的内存。

深拷贝,产生新的对象,开辟新的内存空间
浅拷贝,不产生新的对象,不开辟新的内存空间,只是把指针指向原来对象的内存地址。

拷贝的目的是产生两个互不影响的对象,所以:

1、对不可变对象来说,由于对象本身不可以进行修改,即不能对它产生影响。所以不可变对象的 copy 都是浅拷贝。
2、不可变对象的 mutableCopy 是深拷贝。
3、可变对象的 copy 是深拷贝。
4、可变对象的 mutableCopy 是深拷贝。

对于容器对象,也完全遵守上面的情况,只不过发生深拷贝时对容器对象本身来说是深拷贝,因为产生了新对象,而对容器内的元素来说是浅拷贝。即:修改容器内的元素,无论是原来对象还是拷贝产生的新对象,两个容器内的元素都会发生变化,因为容器内存的是容器元素的内存地址。如果想让容器对象本身及容器内的元素都发生深拷贝,使用归档。先归档,再解档。

上一篇下一篇

猜你喜欢

热点阅读