OC 语言的深拷贝和浅拷贝的区别
2016-08-11 本文已影响159人
碧霄问鼎
OC 语言的深拷贝和浅拷贝的区别:有没有产生新对象,即开辟新的内存。
深拷贝,产生新的对象,开辟新的内存空间
浅拷贝,不产生新的对象,不开辟新的内存空间,只是把指针指向原来对象的内存地址。
拷贝的目的是产生两个互不影响的对象,所以:
1、对不可变对象来说,由于对象本身不可以进行修改,即不能对它产生影响。所以不可变对象的 copy 都是浅拷贝。
2、不可变对象的 mutableCopy 是深拷贝。
3、可变对象的 copy 是深拷贝。
4、可变对象的 mutableCopy 是深拷贝。
对于容器对象,也完全遵守上面的情况,只不过发生深拷贝时对容器对象本身来说是深拷贝,因为产生了新对象,而对容器内的元素来说是浅拷贝。即:修改容器内的元素,无论是原来对象还是拷贝产生的新对象,两个容器内的元素都会发生变化,因为容器内存的是容器元素的内存地址。如果想让容器对象本身及容器内的元素都发生深拷贝,使用归档。先归档,再解档。