深拷贝、浅拷贝的理解与使用场景

 我来答
青柠姑娘17
2022-06-15 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7454
采纳率:100%
帮助的人:48.2万
展开全部
通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝

区别点:

深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样。
浅拷贝只是拷贝指向原来对象的地址,使原对象的引用计数+1

像NSString、NSNumber这些不能包含其他对象的叫做非容器类对象
像NSArray、NSDictionary这些可以包含其他对象的叫容器类对象

打印结果如下:

通过对比不难发现:

上面我们使用的是不可变的NSString,下面我们再使用可变的NSMutableString对比一下:

打印结果如下:

不难发现,对于NSMutableString, 无论是copy还是mutableCopy都会创建一个新对象,属于深拷贝

打印结果如下:

不难发现,copy是浅拷贝,mutableCopy是深拷贝,不过需要注意的是容器对象的成员元素都指向相同的地址

打印结果如下:

对比可见,容器对象与非容器对象类似,可变对象的复制都是深拷贝,不可变对象copy是浅拷贝,mutableCopy是深拷贝
需要注意的是对容器而言,元素对象始终是指针复制

正如前面所说,容器对象中的元素对象无论是copy还是mutableCopy都是指针复制,如何实现容器对象的完全深拷贝呢?

系统为我们实现容器对象的完全深拷贝提供了方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式