Copy 和 mutableCopy
copy是什么?
- Copy的字面意思是:“复制”、“拷贝”,是一个产生副本的过程。
copy的目的:
- 在改变原有对象的时候,不会改变新对象的值
- 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件。
copy的特点:
- 修改源文件的内容,不会影响副本文件;
- 修改副本文件的内容,不会影响源文件。
OC中copy的作用是:
- 利用一个源对象产生一个副本对象
OC中copy的特点:
- 修改源对象的属性和行为,不会影响副本对象;
- 修改副本对象的属性和行为,不会影响源对象。
如何使用copy功能?
- 一个对象可以调用copy或mutableCopy方法来创建一个副本对象。
- copy:创建的时不可变副本(如NSString、NSArray、NSDictionary)。
- mutableCopy:创建的可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)。
使用copy功能的前提:
- copy:
需要遵守NSCopying协议,实现copyWithZone:方法.@protocol NSCopying - (id)copyWithZone:(NSZone *)zone; @end
- mutableCopy:
需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end
深复制和浅复制的区别:
- 深复制(深拷贝/内容拷贝):
- 本质:产生了新对象。
- 特点:
1、源对象和副本对象是不同的两个对象; 2、源对象引用计数器不变,副本对象计数器为1(因为是新产生的)。
- 浅复制(浅拷贝/指针拷贝):
- 本质:没有产生新对象。
- 特点:
1、源对象和副本对象是同一对象; 2、源对象(副本对象)引用计数器+1,相当于做一次retain操作。
![](http://upload-images.jianshu.io/upload_images/666901-7678f963a7827bf0.png?imageMogr2/auto-orient/strip%257CimageView2/2/w/1240)