本帖最后由 Simpon 于 2016-10-27 09:40 编辑
开篇声明:应广大同学需求,在面试过程中,总有些面试官会问到深拷贝与前拷贝的区别。本文是关于iOS中深拷贝与浅拷贝的详解、区别以及部分测试代码。
首先说些概念性的东西。
什么是浅拷贝与深拷贝。
浅拷贝就是不可变对象执行不可变拷贝(copy)
深拷贝就是如果执行拷贝时 只要有可变的无论是可变对象还是可变拷贝(mutableCopy)
在简单点说
只有源对象和副本对象都不可变才是浅拷贝,其它都是深拷贝!
copy 创建的是不可变副本(NSString , NSArray, NSDictionary)
mutableCopy 创建的是可变副本 (NSMutableString, NSMutableArray, NSMutableDictionary)
shallow copy 浅拷贝(指针拷贝):相当于做了一次retain操作 引用计数器加1 没有产生新的对象 源对象和副本对象是同一个对象!
deep copy 深拷贝(内容拷贝):源对象和副本对象是两个不同的对象,源对象的计数器不变,副本对象计数器加1(产生了一个新的对象)
那么一般的面试官就会问:深copy 和浅copy的区别是什么?
可参考的回答如下:
综上所述,希望同学们对于深拷贝与浅拷贝能有个更深的认识,不过其实当面试官问到该问题的时候,一般还会伴随着其他的问题,在他提出问题之前,莫不如主动抢占先机,提前说明,那么推荐同学们去看下
精华推荐:
|