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

  • 相关阅读:
    ES6 变量的解构赋值
    【js重学系列】new
    【js面试系列】手写常见js方法
    【js重学系列】this
    js-继承
    【js重学系列】数组高阶函数
    【js面试系列】数组去重
    云服务器部署项目-基本使用流程
    mongodb-基本使用
    移动端适配
  • 原文地址:https://www.cnblogs.com/shadowflyer/p/3655959.html
Copyright © 2011-2022 走看看