美文网首页iOS Developer
copy 和 mutableCopy 和 NSCopying协议

copy 和 mutableCopy 和 NSCopying协议

作者: 盈盈一水不得语 | 来源:发表于2017-07-31 16:58 被阅读0次

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

相关文章

网友评论

    本文标题:copy 和 mutableCopy 和 NSCopying协议

    本文链接:https://www.haomeiwen.com/subject/tvjrlxtx.html