copy 和 mutableCopy 和 NSCopying协议

1 使用copy拷贝的时候 ,返回的是一个不可变对象。

2 使用mutableCopy拷贝的时候,返回的是一个可变的对象

3 不可变对象使用copy拷贝的时候,是浅拷贝,只拷贝其指针;使用mutableCopy拷贝的时候是深拷贝,拷贝其内容

4 可变对象使用copy拷贝和mutableCopy拷贝是,都是深拷贝

如果想令自己的类支持拷贝操作,就要实现NSCopying协议,该协议只有一个方法

- (id)copyWithZone:(NSZone *)zone;

这个方法适用于不可变对象的拷贝,如果自己的类分为可变版本和不可变版本,那么就要实现NSMutableCopying协议,同只有一个方法

- (id)mutableCopyWithZone:(NSZone *)zone;


另  :

对于集合类来说,深拷贝所拷贝的是集合对象本身,集合里面的内容依然是浅拷贝(指针拷贝)

若想使集合里面的对象一起深拷贝,可用以下方法,flag为YES时,会向数组中的每个元素发送copy消息

- (instancetype)initWithSet:(NSSet*)set copyItems:(BOOL)flag;

- (instancetype)initWithArray:(NSArray*)array copyItems:(BOOL)flag;


参考自

http://www.jianshu.com/p/63239d4d65e0

http://www.jianshu.com/p/ed6c1659dc56

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容