• 关于copy和mutableCopy方法


            OC中创建对象副本的方法有copy和mutableCopy,一个对象在调用copy方法时需要先实现NSCopying协议,通过此方法创建的是不可变的副本;对象在调用mutableCopy方法时需要先实现NSMutableCopying协议,通过此方法创建的时可改变的副本对象。

            在使用这两个方法的时候涉及到两个概念:

            1、深复制

            2、浅复制

            下面来说一下这两者的区别。

            深复制:是进行内容拷贝,源对象指针和副本对象指针指向的是不同的两个对象。源对象引用计数不变,副本对象引用计数不变。

            浅复制:只进行指针拷贝,源对象指针和副本对象指针指向的是同一个对象。对象的引用计数+1,类似做了一次retain操作。

            

            用NSMutableString和NSString对象来举例:

            1、NSMutableString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象

            2、NSMutableString对象调用copy方法,深复制,返回一个NSString对象

            3、NSString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象

            4、NSString对象调用copy方法,浅复制,返回一个NSString对象(因为NSString在调用copy方法后返回的仍是一个不可更改的对象,所以为了效率,这两个对象其实是同一个对象,只进行了指针copy,类似于进行了retain操作)。

  • 相关阅读:
    java 安全沙箱模型详解
    ProcessLifecycleOwner判断Android应用程序前后台切换
    React 使用 antd 实现按需加载
    数据湖!这是个什么东东!!!
    Linux sed awk 总结之001
    Linux超实用网络篇汇总001
    非常实用Curl命令整理
    Mysql 查找锁定事务并kill
    sqlserver 查看sql语句是否被重用
    Linux下配置mysql允许指定IP远程访问
  • 原文地址:https://www.cnblogs.com/arthas/p/4666514.html
Copyright © 2020-2023  润新知