一、OC中copy的作用:利用一个源对象产生一个副本对象。
二、如何使用copy功能
一个对象可以通过调用copy或mutableCopy的方法来创建一个副本对象。
1、copy:不管是可变对象还是不可变对象调用copy,创建的都是是不可变副本(如NSString、NSArray、NSDictionary)。
2、mutableCopy:不管是可变对象还是不可变对象调用mutableCopy,创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary)。
常见的复制如下图:
三、使用copy功能的前提:
1、copy:需要遵守NSCopying协议,实现copyWithZone:方法。
@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
2、mutableCopy : 需要遵守NSMutableCopying协议,实现mutableCopyWithZone:方法
@protocol NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone;
@end
四、深复制和浅复制的区别
深复制特点:
1.另外在内存中开辟了一个新的内存空间存放这个副本,产生一个新的对象;
2.源对象的引用计数不变,副本对象的引用计数为1(因为是新产生的)。
本质是产生了新的对象
浅复制特点;
1.浅复制实际上是对指向对象的指针的复制,相当于增加了一个指针指向源对象,没有产生新的对象;
2.源对象引用计数+1,相当于做了一次retain操作。
本质是没有产生新的对象
关于区分深复制与浅复制的一些详细代码如下:
PS:只有源对象和副本对象都是不可变对象时,才是浅复制,其他的都是深复制。(如果你感觉有用就帮忙顶一下吧!)