Copy Functions

本文详细解释了在编程中深拷贝与浅拷贝的区别及其应用场景。通过具体例子阐述了对象复制时仅复制引用与复制内容的区别,并介绍了如何正确地复制可变与不可变对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

Copy Functions

 

 

一般情况下,一个标准的复制操作也可能被称为简单的任务,当您使用=操作符指定一个变量到另一个例如,表达myInt2= myInt1导致整数内容myInt1用于myInt1myInt2使用的内存的内存复制两个独立的区域内存复制操作包含相同的值然而,如果试图以这种方式复制的核心基础对象(Core Foundation object),要知道,你不会复制对象本身,只有引用(Reference)对象


例如一个新核心基金可能会认为,为了使一个CFString对象副本将使用表达式myCFString2= myCFString1再次表达实际字符串数据复制因为myCFString1myCFString2必须有CFStringRef类型这种表达复制对象的引用复制操作之后有两个副本CFString这种类型的副本是非常快的,因为只有引用(Reference)被复制但重要的是要记住,复制这样一个可变对象危险方案,使用全局变量如果一个应用程序的一部分改变一个对象使用引用(Reference)的副本,有没有其他地方方案,其中引用副本知道数据已经改变方式

如果要复制一个对象必须使用核心基金提供专门用于此目的功能之一继续CFString例如,你使用CFStringCreateCopy创造一个全新CFString对象包含相同的原始数据 CreateCopy“功能提供核心基础类型变种CreateMutableCopy它返回一个可以修改对象副本

 

 

 

 

Shallow Copy 

 

复制复合对象集合对象可以包含其他对象对象还必须进行谨慎正如您所期望那样使用=操作符执行重复的对象引用这些对象结果副本对比简单CFStringCFData对象CreateCopy提供化合物CFArrayCFSet对象功能实际执行浅拷贝浅拷贝这些对象情况创建一个新的集合对象原始集合的内容重复对象引用复制到新的容器这种类型的复制是非常有用例如如果你有一个数组,不可改变要重新排序这种情况下希望重复所有包含的对象因为没有必要改变他们为什么使用额外的内存你想要的只是一套包括要改变对象在这里适用同样的风险复制的简单类型对象引用

 

 

Deep Copy

 

当你想创建一个全新的复合对象必须执行一个深拷贝一个深拷贝复制复合对象以及其包含所有对象内容当前版本核心基础包括执行财产清单复制(见CFPropertyListCreateDeepCopy功能如果你想创建其他结构拷贝你可以执行深拷贝递归下降复合对象复制所有内容逐一自己照顾在执行此功能作为复合对象可以是递归,他们可能直接或间接地包含了自己这可能会导致递归循环

 

 

 

可简单的这样理解。

copy的目的 就是复制对象 也就是说要新建一个对象

不可变对象copy == 对象retain(内存优化机制的结果)
可变对象copy     == 新建了个不可变对象
不可变/可变对象mutablecopy == 新建一个可变对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值