第一个问题:什么是浅拷贝和深拷贝?
浅拷贝
浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如:
char* str = (char)malloc(100);
char str2 = str;
浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。
深拷贝:
深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。
=====================================
oc中哪些操作实现浅拷贝:
第一条:retain操作,始终是浅复制。返回对象是否可变与被复制的对象保持一致。
在 iOS 里面, 使用retain 关键字进行引用计数,就是一种更加保险的浅拷贝。他既让几个指针共用同一片内存空间,又可以在release 由于计数的存在,不会轻易的销毁内存,达到更加简单使用的目的。
第二条:copy操作,对于不可变对象是浅复制。引用计数每次加一。始终返回一个不可变对象。
oc中哪些操作实现深拷贝:
第一条:copy操作,对于可变对象为深复制,引用计数不改变。
第二条:mutableCopy操作:始终是深复制,引用计数不改变。始终返回一个可变对象。