博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS深拷贝浅拷贝
阅读量:6435 次
发布时间:2019-06-23

本文共 606 字,大约阅读时间需要 2 分钟。

浅拷贝:浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝

深拷贝:直接拷贝对象到内存中一块区域,然后把新对象的指针指向这块内存

在iOS中并不是所有对象都支持Copy和MutableCopy,遵循NSCopying协议的类可以发送Copy协议,遵循NSMutableCopying协议的类可以发送MutableCopy消息。如果一个对象没有遵循这两个协议而发送Copy或者MutableCopy消息那么会发生异常。如果要遵循NSCopying协议,那么必须实现copyWithZone方法。如果要遵循NSMutableCopying协议那么必须实现mutableCopyWithZone方法

1.非容器对象(NSString)

不可变对象调用Copy方法其实只是把当前对象的指针指向了原对象的地址,而调用mutableCopy方法则是新分配了一块内存区域并把新对象的指针指向了这块区域。
可变对象来说调用Copy和MutableCopy方法都会重新分配一块内存。但是copy和mutableCopy的区别在于copy在复制对象的时候其实是返回了一个不可变对象,因此当调用方法改变对象的时候会崩溃
2.容器类对象(NSArray)
容器对象本身和非容器对象是同样的效果,但是容器里的元素还是指针复制。

转载于:https://www.cnblogs.com/yxl-151217/p/10836758.html

你可能感兴趣的文章
Centos 7 x86 安装JDK
查看>>
微信小程序的组件用法与传统HTML5标签的区别
查看>>
Hangfire 使用笔记
查看>>
(C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标?
查看>>
教你彻底学会c语言基础——文件操作
查看>>
如何使用免费控件将Word表格中的数据导入到Excel中
查看>>
seafile服务器配置
查看>>
HyperLedger Fabric 1.2 区块链应用场景(3.1)
查看>>
也谈谈初创公司的技术团队建设
查看>>
关于 Django 开发的 11 件事
查看>>
Android屏蔽隐藏系统自带输入键盘
查看>>
阿里云 APM 解决方案地图
查看>>
中国HBase技术社区第一届MeetUp-HBase2.0研讨圆桌会
查看>>
阿里云服务器亚太南部 1、亚太南部 2、亚太东北 1、 亚太东北 2是哪个城市
查看>>
学渣的模块化之路——50行代码带你手写一个common.js规范
查看>>
把前端监控做到极致
查看>>
python——变量
查看>>
subline上装node.js插件
查看>>
H3C虚拟化之IRF
查看>>
python字符串操作实方法大合集
查看>>