a. 浅拷贝,不生成新对象(只拷贝指针,内容依旧是原对象指针所指向内容)
b. 深拷贝,生成新的对象(生成新的指针地址,拷贝指针指向内容)
不可变_不可变.png
不可变_可变.png
结论:
不可变对象 copy 生成不可变对象,拷贝方式为浅拷贝,执行mutablecopy生成可变对象,拷贝方式为深拷贝。
可变_不可变.png
可变_可变.png
结论:
可变对象 copy 生成不可变对象,拷贝方式为深拷贝,执行mutablecopy生成可变对象,拷贝方式为深拷贝。
补充:
如何令自己所写的对象具有拷贝功能?
·如果想让自己的类具备copy方法,并返回不可变类型,必须遵循NSCoping协议,并且实现-(id)copyWithZone:(NSZone *)zone
方法。
·如果想让自己的类具备mutableCopy方法,并返回可变类型,必须遵循NSMutableCoping协议,并且实现-(id)mutableCopyWithZone:(NSZone *)zone
方法。
写在最后:
- NSArray与NSMutableArray,
- NSDictionary与NSMutableDictionary
它们的拷贝方式和 NSString 与NSMutableString的类似,可参考上面的。