NSString的copy、retain、mutableCopy

  规范上说NSString用copy比较安全,我试验了一下,总结如下:

  NSString 的copy和retain效果一样,而且copy和retain出来的对象的内存地址也和源地址一样,而不是理论上copy应该开辟新地址那样,猜测原因应该是系统做了优化,因为NSString本身就不可变,所以copy没必要开辟新地址,浪费空间,这就跟NSString常量都共用一个内存地址一个道理, NSString的mutableCopy会开辟新内存地址。

  NSMutableString的copy和retain效果不一样,copy会开辟新的内存地址,原因很简单,因为NSMutableString可变,当然要开辟新地址保留copy时候的值,否则后续NSMutableString改变后copy出来的值会随之而变,NSMutableString的mutableCopy会开辟心内存地址。

  对于copy来说,如果源对象是不可变的,那么是浅拷贝,没有必要深拷贝;如果源对象可变,为了安全性,深拷贝,生成副本。

  对于mutablecopy来说,不管源对象是否可变,都是深拷贝。

  因此如果希望对象跟着源对象的值变化,那么就是用retain;如果希望对象保持独立的值,那就使用copy。当然这是在源对象为可变的情况下。

  这些规则在NSArray,NSDictionary上同样适用。

  详细的分析可以参考 http://blog.csdn.net/u010810493/article/details/20708547

转载于:https://www.cnblogs.com/shadowflyer/p/3655959.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值