【探索】- 图解深浅拷贝(OC)

前言

拷贝分为深拷贝和浅拷贝,理解拷贝,尤其是深拷贝,需要一些归档知识,该知识我们后面再讲。

讲解

我们通过三个操作方式,以及三种操作方式的内存图,来对比着讲解拷贝。
三种操作方式分别为:辅助运算符操作、浅拷贝操作、深拷贝操作

赋值运算符操作

我们在对两个对象指针进行“=”赋值运算符操作时,实际上的效果相当于给等号右边的变量起了一个等号左边的别名(仅仅是实际效果上),这时不论通过这两个名字中的哪个,对数组进行操纵时,结果都会影响另一个。

请自行脑补金角大王拿着葫芦收孙行者、者行孙、行者孙的场景

NSMutableArray *sunXingZhe = [NSMutableArray arrayWithObject:@”xxx”];
NSMutableArray *zheXingSun = sunXingZhe;
NSMutableArray *xingZheSun = sunXingZhe;
图示
赋值运算符本质

浅复制

指对原指针做mutableCopy操作(接上例代码)浅复制同样不会创建“内容副本”

zheXingSun = [sunXingZhe mutableCopy];
图示
浅复制内存图

深复制

深复制需要用到归档和解档操作,类似于孙悟空拔毫毛变出另一个叫者行孙的猴子,两个名字指向了长的相同的两个生物体。

NSData haoMao = [NSKeyedArchiver archiverDataWithRootObject:sunXingZhe];
xingZheSun = [NSKeyedUnachiver unarchivedObjectWithData:haoMao];
图示
深复制内存图

订正

赋值运算符本质就是浅复制,并非之前说的“其别名”,特订正~↖(^ω^)↗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值