retain和copy的区别

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值