首页 > 其他 > 详细

copy和retain的使用区别

时间:2014-02-17 01:16:03      阅读:488      评论:0      收藏:0      [点我收藏+]

bubuko.com,布布扣

从上图的截图代码当中,左边的使用的时retain方法,右边使用的是copy方法。

左边的打印结果为:

bubuko.com,布布扣

右边的打印结果为:

bubuko.com,布布扣

两者之间区别是在于:

(1)retain是在同一块内存地址操作,而copy是重新复制了新的一快内存地址;

(2)retain: 当要使用某个对象的时候,必须使用retain保留该对象;谁retain、谁release,谁污染,谁治理。

 

深拷贝和浅拷贝复制的区别:

(1)浅拷贝只复制对象的本身,对象里的属性、包含的对象不做复制。

(2)深复制则即复制对象本身,对象的属性也会复制一份。

(3)Foundation框架中支持复制的类,默认是浅复制。

如图下图深拷贝和浅拷贝的区别:

bubuko.com,布布扣

列如:

bubuko.com,布布扣

 

对象的自定义拷贝

bubuko.com,布布扣

bubuko.com,布布扣

 

例如:浅拷贝对象截图

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

打印结果为:

bubuko.com,布布扣

总结:由打印的结果看出:person1复制出了一个新的对象person2,使用了NSCopying 协议。而age1的地址却没有发生改变,说明为浅拷贝对象。

深拷贝对象截图:

bubuko.com,布布扣

 

bubuko.com,布布扣

 

打印结果为:

bubuko.com,布布扣

总结:name的地址发生了改变,说明为深拷贝,判断copy协议是否为深拷贝或者浅拷贝时,要先判断是否复制了对象的属性。

copy、mutableCopy和retain之间的关系

 

(1)Foundation可复制的对象,当我们copy的是一个不可变的对象时,它的作用相当于retain(Cocoa做的内存优化)《copy+不可变相当于retain》。

(2)当我们使用mutableCopy时,无论源对象是否可变,副本是可变的,并且实现了真正意义上的拷贝。

(3)当我们copy的时一个可变对象时,副本对象时不可变的,同样实现了真正意义上的拷贝。

 

 

copy和retain的使用区别

原文:http://www.cnblogs.com/iosapp/p/3551425.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!