iOS|iOS 深拷贝 浅拷贝

深复制 & 浅复制
深复制:指的是内容拷贝。源对象和副本指向的是不同的两个对象,源对象引用计数器不变,副本计数器设置为1
浅复制:指针拷贝,源对象和副本指向的是同一个对象,对象的引用计数器+1,其实相当于做了一次retain操作。
代码实现:

iOS|iOS 深拷贝 浅拷贝
文章图片
代码测试.png 打印结果如下图:

iOS|iOS 深拷贝 浅拷贝
文章图片
打印结果.png 【iOS|iOS 深拷贝 浅拷贝】由打印结果可知:
copy是一个不可变的原对象(NSArray, NSString, NSDictionary)时,默认的copy都是浅拷贝,相当于retain, 当copy是一个可变的原对象时候,属于深拷贝。
当使用mutableCopy时候,不管原对象是否为可变(NSArray, NSString, NSDictionary, NSMutableArray, NSMutableStringNSMutableDictionary),都会实现深拷贝。
copy:
需要实现NSCopying协议,创建的是不可变副本。(NSString, NSArray, NSDictionary
mutableCopy:
需要实现NSMutableCopying协议,创建的是可变副本。(NSMutableString, NSMutableArray, NSMutableDictionary

“拷贝的目的是建立副本的同时,若修改原始对象,和副本不会互相干扰。”

    推荐阅读