【ObjectC—浅copy和深copy】
2015-11-15 19:03
513 查看
一、OC设计copy的目的
为了能够从源对象copy一个新的对象副本,改变新对象(副本)的时候,不会影响到原来的对象。
二、实现copy协议
OC提供了两种copy方法:copy和mutableCopy,一个对象要想使用copy方法必须实现NSCoppying协议,想使用mutabCopy必须实现NSMutableCopying协议。
三、copy的作用
从上面这个图我们可以看出,其实创建可变或不可变对象跟源对象没有关系,而跟复制的方式有关系。以NSString为例分情况说明下:
1)NSString调用copy方法
是浅拷贝,出于对性能的考虑,只是对源对象计数器+1(相当于retain),并没有产生新的对象。
2)NSMutableString调用copy方法
是深拷贝,产生一个不可变的副本,源对象的计数器不变,新产生对象的计数器为1。
3)NSString调用MutableCopy方法
是深copy,产生一个可变的副本,源对象的计数器不变,新产生对象的计数器为1。
4)NSMutableString调用MutableCopy方法
是深copy
由此可见,除了NSstring的copy方法是浅copy,其他三种情况都是深copy。
总结来说:
1)深copy:也就是内容copy,会从源对象复制一份新的对象出来,新对象计数器为1,源对象的计数器不发生变化。
2)浅copy:也就是指针copy,只是将指针复制一份给对象,源对象计数器会+1,通常相当于对象retain操作。
四、自定义对象实现copy
分两步走:
1)实现copyying(mutableCopying)协议。
2)实现copyWithZone方法。
为了能够从源对象copy一个新的对象副本,改变新对象(副本)的时候,不会影响到原来的对象。
二、实现copy协议
OC提供了两种copy方法:copy和mutableCopy,一个对象要想使用copy方法必须实现NSCoppying协议,想使用mutabCopy必须实现NSMutableCopying协议。
三、copy的作用
从上面这个图我们可以看出,其实创建可变或不可变对象跟源对象没有关系,而跟复制的方式有关系。以NSString为例分情况说明下:
1)NSString调用copy方法
是浅拷贝,出于对性能的考虑,只是对源对象计数器+1(相当于retain),并没有产生新的对象。
2)NSMutableString调用copy方法
是深拷贝,产生一个不可变的副本,源对象的计数器不变,新产生对象的计数器为1。
3)NSString调用MutableCopy方法
是深copy,产生一个可变的副本,源对象的计数器不变,新产生对象的计数器为1。
4)NSMutableString调用MutableCopy方法
是深copy
由此可见,除了NSstring的copy方法是浅copy,其他三种情况都是深copy。
总结来说:
1)深copy:也就是内容copy,会从源对象复制一份新的对象出来,新对象计数器为1,源对象的计数器不发生变化。
2)浅copy:也就是指针copy,只是将指针复制一份给对象,源对象计数器会+1,通常相当于对象retain操作。
四、自定义对象实现copy
分两步走:
1)实现copyying(mutableCopying)协议。
2)实现copyWithZone方法。
相关文章推荐
- ECMAScript——引用数据类型之object
- Swift与Objective-C API的交互
- Object-C,四则运算计算器
- Object-C,四则运算计算器
- Object-C,四则运算计算器
- Objective-C之Protocol
- IOS Objective c 异步链接 网上下载内容到本地及SBjson解析
- Swift调用Objective C的FrameWork
- Object-C初体验
- Object-C初体验
- Object-C初体验
- NSObject 内省方法
- 初探swift语言的学习—Object-C与Swift混编
- Objective-C之集合对象的内存管理
- Objective-C:Foundation
- Objective-C:类别&代理
- Objective-C中的Block
- Objective-C:内存管理
- 关于oc运行时 isa指针详解
- Objective-C中的登录界面判断输入的内容