博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios开发中的深拷贝和浅拷贝
阅读量:4646 次
发布时间:2019-06-09

本文共 849 字,大约阅读时间需要 2 分钟。

这是一个老生常谈的话题,面试中也经常被问到,下面总结一下自己的一些心得。

一句话总结:

浅拷贝就是指针拷贝;

深拷贝是对象本身的拷贝;

下面一张抽象的图可以直观的表述出两句话的内涵

 

 

其实这里还引申出了一个新的问题:为什么NSString要用copy修饰

在oc中父类的指针可以指向子类的对象,这一现象是oc中多态的一个特性。

假设声明了一个NSString对象,然后让它指向一个NSMutableString对象,这一点是完全可以的,因为NSMutableString的父类是NSSting。NSMutableString是一个可以改变的对象,如果我们用strong修饰,NSString对象强引用了NSMutableString对象。假如我们在其他的地方修改了这个NSMutableString对象,那么NSString的值会随之改变,但是我么你的本意是不让他改变,这就使得NSSting对象的值收到了NSMutableString 的印象。

 

这是我们就可以用copy,来重新生成一个对象。

但是,这里并不是简单的copy,其中还有各种情况出现

1、对NSString 进行copy ->  这是一个浅拷贝,但是因为是不可变对象,后期值也不会改变;

2、对NSString 进行mutableCopy  -> 这是一个深拷贝,但是拷贝出来的是一个可变的对象NSMutableString;

3、对NSMutableString 进行copy  -> 这是一个深拷贝,拷贝出来一个不可变的对象;

4、对NSmutableString 进行mutableCopy -> 这是一个深拷贝,拷贝出来一个可变的对象;

 

我们可以总结为:

对对象进行mutableCopy,不管是可变还是不可变对象都是深拷贝,并且拷贝出来的对象是可变的对象;

对对象进行copy,copy出来的对象是一个不可变的对象。

转载于:https://www.cnblogs.com/danMing-love/p/10455162.html

你可能感兴趣的文章
nodejs pm2使用
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>
【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
查看>>
ABAP 程序间的调用
查看>>
移动端单屏解决方案
查看>>
web渗透测试基本步骤
查看>>
使用Struts2标签遍历集合
查看>>
angular.isUndefined()
查看>>
第一次软件工程作业(改进版)
查看>>
网络流24题-飞行员配对方案问题
查看>>
Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
查看>>