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