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

一句话总结:

浅拷贝就是指针拷贝;

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

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

其实这里还引申出了一个新的问题:为什么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出来的对象是一个不可变的对象。

最新文章

  1. linux下对进程按照内存使用情况进行排序
  2. PHP验证邮箱地址代码
  3. Redis缓存服务搭建及实现数据读写
  4. 使用Google Chart API绘制组合图
  5. [设计模式]<<设计模式之禅>>关于接口隔离原则
  6. Linux下安装memcache
  7. java面向对象--类加载器及Class对象
  8. U盘启动盘安装Windows10操作系统详解
  9. 阿里云ECS相关
  10. python+unnitest时运行后不执行main函数里面的内容
  11. OpenCV-Python入门教程2-打开摄像头
  12. 常见web UI 元素操作 及API使用
  13. Centos7 Yum安装 PHP5.5,5.6,7.0
  14. 以英雄联盟的方式建模,谈对依赖注入(DI)的理解以及Autofac的用法(一)
  15. 主机网络ping: unknown host baidu.com问题解决
  16. hadoop和spark相关参数的配置
  17. js-dom-动态创建html标签时,name属性的初始化问题
  18. Android之设计模式
  19. php 使用html5 XHR2 上传文件 进度显示
  20. nginx反向代理解决wechat图片问题

热门文章

  1. MySql 从SQL文件导入
  2. gitlab安装后吃内存的解决办法
  3. 项目Alpha冲刺(2/10)
  4. Asp.net Mvc 与WebForm 混合开发
  5. Linux库多重依赖
  6. Go命令官方指南【原译】
  7. STM32 USB 鼠标+键盘 串口控制
  8. Java Swing 编程 JComboBox 实现模糊查找功能。
  9. Justoj 2388最短区间 贪心
  10. java中枚举起别名