NSString retain or copy

1。对NSString应用retain,效率无疑是最好的

2。用copy最安全,因为NSString 为 NSMutableString 的基类,如果将NSMutableString 以retain的形式赋值给NSString后,后续修改NSMutableString会导致NSString内容的变化,这通常不是我们希望的,所以用copy最安全。

3。到底用哪个?貌似还是用copy,因为copy并不一定导致一个新对对象创建,而牺牲效率。copy会调用NSCopying中的 -(id)copyWithZone:(NSZone *),我们可以判断下self是NSString还是NSMutableString,如果是NSString,就地[self  retain],[return self]。否则老老实实拷贝对象赋值,这样可以实现效率和安全的结合,实验的结果也是如此。

复制代码
1     NSString* strOrgin = [NSString stringWithFormat:@"curr time is %@", [NSDate date]];
2 
3     NSLog(@"strOrgin = %p, retainCount = %d", strOrgin, [strOrgin retainCount]);
4 
5     NSString* strCopy = [strOrgin copy];
6 
7     NSLog(@"strCopy = %p, retainCount=%d", strCopy, [strCopy retainCount]);
8 
9     NSLog(@"strOrgin = %p, retainCount = %d", strOrgin, [strOrgin retainCount]);
复制代码

 

-------------------------------------------out put-------------------------------

1 Test[50250:707] strOrgin = 0x1e52e4d0, retainCount = 1
2 
3 Test[50250:707] strCopy = 0x1e52e4d0, retainCount=2
4 
5 Test[50250:707] strOrgin = 0x1e52e4d0, retainCount = 2

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值