关于copy和mutableCopy方法
OC中创建对象副本的方法有copy和mutableCopy,一个对象在调用copy方法时需要先实现NSCopying协议,通过此方法创建的是不可变的副本;对象在调用mutableCopy方法时需要先实现NSMutableCopying协议,通过此方法创建的时可改变的副本对象。
在使用这两个方法的时候涉及到两个概念:
1、深复制
2、浅复制
下面来说一下这两者的区别。
深复制:是进行内容拷贝,源对象指针和副本对象指针指向的是不同的两个对象。源对象引用计数不变,副本对象引用计数不变。
浅复制:只进行指针拷贝,源对象指针和副本对象指针指向的是同一个对象。对象的引用计数+1,类似做了一次retain操作。
用NSMutableString和NSString对象来举例:
1、NSMutableString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象
2、NSMutableString对象调用copy方法,深复制,返回一个NSString对象
3、NSString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象
4、NSString对象调用copy方法,浅复制,返回一个NSString对象(因为NSString在调用copy方法后返回的仍是一个不可更改的对象,所以为了效率,这两个对象其实是同一个对象,只进行了指针copy,类似于进行了retain操作)。