码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中深拷贝、浅拷贝和retain的区别

时间:2016-08-05 13:45:27      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“对象永远只有一个",浅拷贝使对象的引用计数器+1。代码如下:

技术分享

技术分享

可以看出不可变字符串的指针指向了同一地址,并没有重新开辟内存。

深拷贝:深拷贝是对object对象的复制,保留原对象的值,开辟新的内存地址。

技术分享

技术分享

技术分享

如图中代码,声明一个可变数组,为WXDObject类添加一个用copy修饰的属性,在类的实现后将指针指向可变数组,打印两者的地址发现地址发生了变化。所以用copy修饰可变对象,将会进行深拷贝。

retain修饰:将上面array的修饰改为retain,对象引用计数器+1,指向同一地址,并没有重新开辟内存地址。

总结:

  retain:引用计数器+1,指向同一地址。结果和浅拷贝一样,仅仅是使得对象的引用计数器自增1.

  copy:对不可变对象等同与retain,指针拷贝,引用计数器+1。对可变对象执行深拷贝,等同mutableCopy,内容拷贝。

      mutableCopy:深拷贝是重新创一个新对象,但是却保留原来对象的值。内容拷贝。

 

iOS中深拷贝、浅拷贝和retain的区别

标签:

原文地址:http://www.cnblogs.com/wanxudong/p/5737877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!