IOS学习之浅析深拷贝与浅拷贝

2018-05-27  本文已影响0人  最强的小强

a. 浅拷贝,不生成新对象(只拷贝指针,内容依旧是原对象指针所指向内容)
b. 深拷贝,生成新的对象(生成新的指针地址,拷贝指针指向内容)


不可变_不可变.png 不可变_可变.png

结论:

不可变对象 copy 生成不可变对象,拷贝方式为浅拷贝,执行mutablecopy生成可变对象,拷贝方式为深拷贝。

可变_不可变.png 可变_可变.png

结论:

可变对象 copy 生成不可变对象,拷贝方式为深拷贝,执行mutablecopy生成可变对象,拷贝方式为深拷贝。

补充:

如何令自己所写的对象具有拷贝功能?
·如果想让自己的类具备copy方法,并返回不可变类型,必须遵循NSCoping协议,并且实现 -(id)copyWithZone:(NSZone *)zone 方法。
·如果想让自己的类具备mutableCopy方法,并返回可变类型,必须遵循NSMutableCoping协议,并且实现 -(id)mutableCopyWithZone:(NSZone *)zone 方法。

写在最后:

  1. NSArray与NSMutableArray,
  2. NSDictionary与NSMutableDictionary
    它们的拷贝方式和 NSString 与NSMutableString的类似,可参考上面的。
上一篇 下一篇

猜你喜欢

热点阅读