深浅拷贝的理解
来源:互联网 发布:淘宝异地客服在家兼职 编辑:程序博客网 时间:2024/05/30 19:34
深浅拷贝前提是:是实现NSCopying或者NSMutableCopying协议。
浅拷贝只是复制对象本身,对象的属性和包含的对象不做复制。
深拷贝则对对象本身复制,同是对对象的属性也进行复制。
深浅拷贝的本质区别是对象或者对象属性的内存地址是否一样,一样则为浅拷贝,不一样则为深拷贝。
Foundation框架支持复制的类,默认是浅拷贝。其中对Foundation中不可变的对象进行copy时作用相当于retain。
而如果是mutablecopy时,无论对象是否可变,副本是可变的,并且实现了真正意义上的copy。如果对可变对象进行copy,
副本对象是不可变的,同样是真正意义上的copy。
retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制,
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。
那么先让我们来看一看下边数组类型的转换
1、不可变对象→可变对象的转换:
2、可变对象→不可变对象的转换:
3、可变对象→可变对象的转换(不同指针变量指向不同的内存地址):
通过上边的两个例子,我们可轻松的将一个对象在可变和不可变之间转换,并且这里不用考虑内存使用原则(即引用计数的问题)。没错,这就是深拷贝的魅力了。
4、同类型对象之间的指针复制(不同指针变量指向同一块内存地址):
则简化为:
问:什么时候用到深浅拷贝?
答:深拷贝是在要将一个对象从可变(不可变)转为不可变(可变)或者将一个对象内容克隆一份时用到;
- 深浅拷贝的理解
- ArrayList的深浅拷贝。
- 深浅的拷贝
- 数组的深浅拷贝
- 对象的深浅拷贝
- 浅谈java的深浅拷贝
- IOS数组的深浅拷贝
- ios_oc 深浅拷贝的区别
- 浅谈ObjC的“深浅拷贝”
- python对象的深浅拷贝
- Javascript深浅拷贝的原理
- JS数组的深浅拷贝
- 对象的深浅拷贝方法
- 详解iOS的深浅拷贝
- js对象的深浅拷贝
- javascript 数组的深浅拷贝
- javascript 对象的深浅拷贝
- js 数组的深浅拷贝
- 深入浅出 消息队列 ActiveMQ
- iOS 使用AFNetworking
- iOS工程如何支持64-bit
- 实体类之间的复制
- 图数据挖掘浅析
- 深浅拷贝的理解
- linux操作命令
- 复制dos文字/复制对话框内容/打开telnet回显
- samba 客户 建立会话
- Java中abstract和interface的区别
- python学习
- Python中Cookie的处理(二)cookielib库
- DOS命令
- Can't create TCP/IP socket (10106)