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;
参考自