深拷贝 浅拷贝
浅拷贝
浅拷贝并不是拷贝对象本身,而是对指向对象的指针进行拷贝,但还是指向同一块堆内存中指针指向的对象
复制代码
可以看出浅拷贝中栈内存中指针对象的地址改变了,但还是指向相同的一块堆内存地址
复制代码
深拷贝
直接拷贝对象到内存中的一块区域,然后把新对象的指针指向这块内存。
复制代码
可以看出深拷贝是直接拷贝对象到内存中的一块区域(分配了一块新的内存空间),然后把新对象的指针指向这块内存,原对象和被赋值对象互不影响。
复制代码
深拷贝与浅拷贝的本质区别
在于是否在堆内存中开辟新的内存空间。
复制代码
区分深拷贝与浅拷贝
主要从 容器类和 非容器 类着手,不管是容器类还是非容器类都有可变对象和不可变对象,所以分为四种:
- 非容器类不可变对象:NSString
- 非容器类可变对象:NSMutableString
- 容器类不可变对象:NSArray
- 容器类可变对象:NSMutableArray
结论
[object copy]:对于可变对象为深拷贝,不可变对象为浅拷贝。
[object mutableCopy]:始终都是深拷贝。
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END