问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

iOS深拷贝与浅拷贝(附demo)

发布网友 发布时间:2023-02-08 10:32

我来回答

1个回答

热心网友 时间:2023-11-07 07:27

浅拷贝又叫指针拷贝,只拷贝对象指针,不创建新的对象,拷贝对象和原对象都指向同一块内存地址的内容。

深拷贝又叫内容拷贝,深拷贝时系统会开辟新的内存空间,把对象存入新的内存区域,相较于原来对象,拷贝对象是一个新的对象,原对象的改变不影响新对象;

大家知道,我们创建NSString属性时候修饰词用的是copy,要是换成strong会怎么呢?请看:

可以看到我们修改strCoptTest,拷贝对象也被修改了。如果我们用copy修饰NSString属性则不会出现这问题,为什么copy修饰不会出现这个问题呢?

参照其他对象,在此猜测当copy对象为NSMutableString对象,NSCopying协议实现里新建了副本对象(等于深拷贝,此时拷贝对象指向一个新地址)

对象用copy修饰

可以看到我们修改arrMut对象后,self.arrList对象的值被动被修改了,这不是我们想要的结果。

执行效果,可以看到避免了被动修改的情况

新建Person类

发现无论是strong还是copy修饰都不安全,和NSString例子同样情况,如下

可以看到arrMut的第一个成员变量person1的name被修改为haha,self.arrList的第一个成员的名字也变为了haha,这不是我们想要的,为什么呢?

上面说到是因为数组内对象没有实现深拷贝,所以我们的目的就是把数组内对象也实现深拷贝,正好NSArray也提供了对应方法:

1.不可变类型属性修饰词用copy;
2.对集合类对象,copy时内部成员变量也要深拷贝;
3.自定义的对象要使用copy的遵循NSCopying协议,实现copyWithZone方法;

1.不可变对象的copy都是浅拷贝,副本类型为不可变类型;
2.不可变对象mutableCopy是深拷贝,副本类型为可变类型;
3.可变对象的copy都是是深拷贝,副本类型为不可变类型;
4.可变对象mutableCopy是深拷贝,副本类型为可变类型;

1.copy修饰的属性,在set方法会进行copy操作,而strong只是赋值;
2.浅拷贝会对原对象指针进行引用,原对象引用计数retainCount会+1,相当于strong;
3.深拷贝等于重新创建一个新对象,不会对原对象有引用关系,原对象retainCount不变;

但是用strong修饰是浅拷贝,会存在原对象被修改,当前对象也被动被改的情况,所以对可变对象赋值时候手动调用mutableCopy;

git传送门:CopyTestDemo

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
会计中级什么时候拿证 会计中级职称什么时候领取 手机中毒后恢复出厂设置就可以了吗? 手机中病毒后如何清除? 做代购初期怎么找客源,微商代购怎么找精准客 ...代购,都是阿迪耐克正品。怎么才能把微商做好。 做微商和代购,有哪些引流获客的方法? 250㎜的水泥撑棍一捆多少根? 吊顶一平要多少丝杠 ...断开电源,一端接地,这个时候把极板远离,为什么是两极板电压变大而... 外婆桥幼儿园音乐游戏优质课教案 《左肺野显示散在小结节状,斑点状及条索阴影,密度不均... ...叶后段及下叶基底段见片絮状稍高密度影,密度不均,边缘模糊,是什么意 ... 肺癌复查 左肺呈一侧性软组织肿块影,内部密度不均匀,少量肺组织残留,右... 肺部结节有什么问题? DMZ非军事化区的安全规则 米东区羊毛工镇被评为什么 dmz什么意思? 如何改考试成绩? 如何改成绩单上的分数 怎么修改成绩单的成绩 小黄鸭口罩的产品定位是什么 异地恋的结局是什么 异地恋要结束的前兆是什么? 克拉霉素简介 纽约暴发的军团病,是怎么回事? 嗜肺军团菌,不知道怎么治疗, 下列治疗军团菌病的首选药物是 恢复快捷键ctrl加什么 ebay每次面试多长时间一亩三分地 iOS中的深浅拷贝 qq三国怎么做副职 QQ三国的副职怎么当?需要几级 ? 梦见白山羊是什么预兆? 某宝买的手机,电源IC坏了,可不可以退货,保修? 苹果供电ic坏了还值得修吗 电源IC坏了,可以用别的手机电源IC换吗 沁园春·雪的全诗是什么? 微信绑定存折需要电子邮件吗 新版微信如何绑定银行卡 公司发行股票有什么条件 京东怎么拒收快递 京东快递运费30,可以拒收吗 请问登录频繁怎么办 ...包装成“美孚”、“嘉实多”卖给广西多地车主 花卉芦荟的叶子怎么用好是吃好,还是外用好 我家的卢荟也不知道能吃吗?叶子上有白斑点的那种 自己家种的芦荟,看着叶子特别的厚实,这种芦荟能不能吃?长得特别旺盛... 家里养的芦荟可以吃吗?有图片吗?我家养的宽叶很厚长的 法律修改之前犯的罪