iOS拷贝(深拷贝&浅拷贝)

什么是文件拷贝

我们在使用电脑的时候,经常会有一个操作,就是ctrl+c和ctrl+v,就是拷贝。

这个拷贝的结果,就是产生一个副本,该副本与源文件完全一致,而且两者互不影响。

修改源文件,不会影响副本文件,而修改副本文件也不会影响源文件。

我们也将这种操作成为克隆

什么是对象拷贝

对象拷贝与文件拷贝类似,新对象与源对象互不影响

深拷贝&浅拷贝

浅拷贝:指针拷贝

深拷贝:堆内容拷贝

ios拷贝的两种方式

1.copy不可变拷贝,产生不可变副本(划重点)

2.mutableCopy可变拷贝,产生可变副本(划重点)

拷贝结果


NSArray的拷贝结果

    

自定义对象类型

对象类型要想支持拷贝,就需要实现NSCopying接口,自定义对象的copy或者mutablecopy都是深拷贝,也就是内存拷贝

自定义容器对象

对容器对象中的数据进行深拷贝,只能使用alloc initwitharray copyItems:yes 

不过一般来说不建议这样做,nsarray数据对象太大,深拷贝导致内存读写太频繁,在上层进行深拷贝,就不需要alloc太大的内存空间,性能更快

引申

本文描述的是ios的深浅拷贝,其实,c/c++/python/js/java等各个语言都有深浅拷贝。其原理也很简单:

浅拷贝是指针拷贝,深拷贝是副本拷贝。

如果理解变量的创建过程,就能顺理成章的理解了,那就是创建变量意味着栈中和堆中都开辟空间,堆中存储变量值,栈中存储指针,指向堆中的值


变量的创建



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容