• 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

  • 相关阅读:
    Android 传感器应用
    WebStrom9 体验nodejs
    Web前端框架 小记
    接入淘宝API(PHP版本)
    Android SDK 国内镜像
    Ubuntu14.04 搭建 node.js 环境(Binaries方式)
    C# 异常类型及对应异常类
    .net中序列化读写xml方法的总结
    ASp.NET Core Centos7运行环境搭建
    Linux Centos 常用命令
  • 原文地址:https://www.cnblogs.com/shadowflyer/p/3655959.html
Copyright © 2020-2023  润新知