深拷贝与浅拷贝

复习 copy与retain的区别:

copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。

retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝。

1. 系统的非容器类对象

这里指的是NSString,NSNumber等等一类的对象。

对于系统的非容器类对象,我们可以认为,如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。

2. 系统的容器类对象 

指NSArray,NSDictionary等。对于容器类本身,上面讨论的结论也是适用的,需要探讨的是复制后容器内对象的变化。

在OC中,所有Foundation中的容器类,分为可变容器和不可变容器,它们的拷贝都是浅拷贝。

容器拷贝的难点在于可变性的变化。容器有两种方法:copy和mutableCopy,再次强调这两者都是浅拷贝。它们的区别在于,返回值是否是可变的。前者返回不可变容器,后者返回可变容器。(摘自)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接...
    滴答大阅读 4,134评论 0 2
  • 导读 最近经常在关注的公众号或者技术网站看到关于 iOS 深拷贝与浅拷贝的话题。看到一篇技术文章,点击收藏或者只是...
    独木舟的木阅读 3,885评论 0 8
  • 转载一、概念与总结 1、浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间,当内存销毁的...
    ilmari阅读 2,890评论 0 2
  • 现今世界上具有信任感比以前都来得浓厚,而且全球各地的人与人之间愈来愈依赖信任,因而加深了我们对信任感的兴趣...
    婉缘阅读 1,216评论 0 0
  • 点击上方蓝字关注「新世相」,我们终将改变潮水的方向。 一 有一句很流行的话:自古深情留不住,唯有套路得人心。 不得...
    新世相阅读 5,057评论 3 27

友情链接更多精彩内容