iOS深拷贝浅拷贝
2024-09-05 07:48:16
浅拷贝:浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝
深拷贝:直接拷贝对象到内存中一块区域,然后把新对象的指针指向这块内存
在iOS中并不是所有对象都支持Copy和MutableCopy,遵循NSCopying协议的类可以发送Copy协议,遵循NSMutableCopying协议的类可以发送MutableCopy消息。如果一个对象没有遵循这两个协议而发送Copy或者MutableCopy消息那么会发生异常。如果要遵循NSCopying协议,那么必须实现copyWithZone方法。如果要遵循NSMutableCopying协议那么必须实现mutableCopyWithZone方法
1.非容器对象(NSString)
不可变对象调用Copy方法其实只是把当前对象的指针指向了原对象的地址,而调用mutableCopy方法则是新分配了一块内存区域并把新对象的指针指向了这块区域。
可变对象来说调用Copy和MutableCopy方法都会重新分配一块内存。但是copy和mutableCopy的区别在于copy在复制对象的时候其实是返回了一个不可变对象,因此当调用方法改变对象的时候会崩溃
2.容器类对象(NSArray)
容器对象本身和非容器对象是同样的效果,但是容器里的元素还是指针复制。
最新文章
- Unity3D 更新文件下载器
- 部分MP4在谷歌浏览器上无法播放
- 亚马逊云服务器AWS安装CentOS
- h5 input file ajax实现文件上传
- SharePoint 学习记事(一)
- java多线程总结四:volatile、synchronized示例
- 【转】SQL2008清除日志
- go网络编程示例,客户端,服务器端
- PHP删除Solr文档
- CSS3 动画触发事件
- MyEclipseアンロックの手順
- Jquery EasyUI Base基础
- MySQL Innodb如何找出阻塞事务源头SQL
- idea怎么创建properties文件
- 编译原理子cygwin的使用
- vue-router-5-命名路由
- avalon2学习教程 03数据填充
- 使用cgroup进行系统资源使用限制
- tushare使用
- Unity-反编译由IL生成的DLL文件