深复制
& 浅复制
深复制
:指的是内容拷贝。源对象和副本指向的是不同的两个对象,源对象引用计数器不变,副本计数器设置为1
浅复制
:指针拷贝,源对象和副本指向的是同一个对象,对象的引用计数器+1,其实相当于做了一次retain操作。
代码实现:
![](https://img.haomeiwen.com/i1698345/5f40e257a6391a9f.png)
打印结果如下图:
![](https://img.haomeiwen.com/i1698345/327e01b7d80b05c7.png)
由打印结果可知:
当copy
是一个不可变的原对象(NSArray
, NSString
, NSDictionary
)时,默认的copy
都是浅拷贝,相当于retain
, 当copy
是一个可变的原对象时候,属于深拷贝。
当使用mutableCopy
时候,不管原对象是否为可变(NSArray
, NSString
, NSDictionary
, NSMutableArray
, NSMutableString
,NSMutableDictionary
),都会实现深拷贝。
copy
:
需要实现NSCopying
协议,创建的是不可变副本。(NSString
, NSArray
, NSDictionary
)
mutableCopy
:
需要实现NSMutableCopying协议,创建的是可变副本。(NSMutableString
, NSMutableArray
, NSMutableDictionary
)
“拷贝的目的是建立副本的同时,若修改原始对象,和副本不会互相干扰。”
网友评论