iOS|iOS 深拷贝 浅拷贝
深复制
& 浅复制
深复制
:指的是内容拷贝。源对象和副本指向的是不同的两个对象,源对象引用计数器不变,副本计数器设置为1
浅复制
:指针拷贝,源对象和副本指向的是同一个对象,对象的引用计数器+1,其实相当于做了一次retain操作。
代码实现:
文章图片
代码测试.png 打印结果如下图:
文章图片
打印结果.png 【iOS|iOS 深拷贝 浅拷贝】由打印结果可知:
当copy
是一个不可变的原对象(NSArray
, NSString
, NSDictionary
)时,默认的copy
都是浅拷贝,相当于retain
, 当copy
是一个可变的原对象时候,属于深拷贝。
当使用mutableCopy
时候,不管原对象是否为可变(NSArray
, NSString
, NSDictionary
, NSMutableArray
, NSMutableString
,NSMutableDictionary
),都会实现深拷贝。
copy
:
需要实现NSCopying
协议,创建的是不可变副本。(NSString
, NSArray
, NSDictionary
)
mutableCopy
:
需要实现NSMutableCopying协议,创建的是可变副本。(NSMutableString
, NSMutableArray
, NSMutableDictionary
)
“拷贝的目的是建立副本的同时,若修改原始对象,和副本不会互相干扰。”
推荐阅读
- 深入理解Go之generate
- 由浅入深理解AOP
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 【1057快报】深入机关,走下田间,交通普法,共创文明
- 生发知识,带你深入了解
- 这座媲美重庆的绝色山城,深藏国宝级景点,更有绝美高山花海!
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 深入理解|深入理解 Android 9.0 Crash 机制(二)