iOS深拷贝、浅拷贝

copy
copy方法返回的是强引用指针。深拷贝指的是内容复制,在内存中重新分配空间给新对象。浅拷贝指的是指针复制,浅拷贝的对象引用计数+1。拷贝不可变对象会浪费内存空间,所以浅拷贝就足够了。copy能够减少对象对上下文的依赖。

不是所有对象都支持copy mutablecopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableCopy消息。
copy返回不可变对象,mutable copy返回可变对象。

一、非容器类对象
NSString NSNumber

1)对不可变对象,copy时指针复制(浅拷贝),mutablecopy是对象复制(深拷贝);

2)对可变对象,copy、mutablecopy都是深拷贝。

二、系统容器对象
NSArray NSDictionary

1)对不可变对象,copy时指针复制(浅拷贝),mutablecopy时对象复制(深拷贝);容器内元素都是指针复制。

2)对可变对象,copy mutablecopy都是深拷贝。元素都是指针复制。

*容器内的元素都是指针复制(浅拷贝),要想连元素都对象复制,使用官方提供的 initWithArray: copyItems:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 790评论 0 2
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 932评论 0 2
  • 原文:http://www.cnblogs.com/beckwang0912/p/7212075.html 一、概...
    Code丶Ling阅读 311评论 0 1
  • 非容器类对象1 . imutable对象 string和stringCopy指向同一段内存,即浅拷贝。而mutab...
    madaoCN阅读 300评论 0 1
  • 深拷贝和浅拷贝这个问题在面试中常常被问到,而在实际开发中,只要稍有不慎,就会在这里出现问题。尤其对于初学者来说,我...
    西门淋雨阅读 1,859评论 0 1