retain和copy的区别

来源:互联网 发布:打开key的软件 编辑:程序博客网 时间:2024/05/17 23:39

retain和copy的区别

当手动进行内存管理时,对于OC对象,在get方法中可以使用retain、 copy

对于普通OC对象使用retain

对于NSString使用copy

retain :使当前对象的引用计数+1,在oc对象中使用

copy :创建一个对象副本,和调用copy方法的对象不是同一个,常常在NSString中使用

深复制(mutablecopy):深拷贝为对象拷贝,原来的对象计数器不变。

浅复制:浅拷贝也为指针拷贝,拷贝后原来的对象计数器会+1;

(不可变对象的copy和retain一样引用计数+1,mutableCopy为浅拷贝,可变对象的copy为浅copy,mutableCopy为深拷贝)

在拷贝时,按照copy或者MutableCopy的默认操作方式进行,只是在由不可变对象复制到不可变对象时,系统为了节约性能就没有新创建这个不可变对象,其余时候还是都要新开辟内存空间,将源对象指向的内容放到新开辟空间中,只是简单的移动,不会进行多余的操作。



个人感觉,理解深复制和浅复制的关键在于抓住复制的主要目的,即产生一个副本对象,在改变源对象或者副本对象时,不会影响另外一个,然后浅复制就是浅层次的复制,只复制表面的东西,深复制就是更深层次的复制,只要与之相关的全部复制过去。


http://www.cnblogs.com/liuxiang520/p/3876679.html


http://blog.sina.com.cn/s/blog_e3fce4f60101rkm2.html


http://www.shangxueba.com/jingyan/1844217.html

0 0
原创粉丝点击