zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    省常中模拟 Test4
    省常中模拟 Test3 Day1
    省常中模拟 Test3 Day2
    省常中模拟 Test1 Day1
    树型动态规划练习总结
    noip2010提高组题解
    noip2003提高组题解
    noip2009提高组题解
    noip2004提高组题解
    noip2002提高组题解
  • 原文地址:https://www.cnblogs.com/shadowflyer/p/3655959.html
Copyright © 2011-2022 走看看