• 【ObjectC—浅copy和深copy】


    一、OC设计copy的目的

      为了能够从源对象copy一个新的对象副本,改变新对象(副本)的时候,不会影响到原来的对象。

    二、实现copy协议

      OC提供了两种copy方法:copy和mutableCopy,一个对象要想使用copy方法必须实现NSCoppying协议,想使用mutabCopy必须实现NSMutableCopying协议。

    三、copy的作用

     

    从上面这个图我们可以看出,其实创建可变或不可变对象跟源对象没有关系,而跟复制的方式有关系。以NSString为例分情况说明下:

    1)NSString调用copy方法

      是浅拷贝,出于对性能的考虑,只是对源对象计数器+1(相当于retain),并没有产生新的对象。

    2)NSMutableString调用copy方法

      是深拷贝,产生一个不可变的副本,源对象的计数器不变,新产生对象的计数器为1。

    3)NSString调用MutableCopy方法

      是深copy,产生一个可变的副本,源对象的计数器不变,新产生对象的计数器为1。

    4)NSMutableString调用MutableCopy方法

      是深copy

    由此可见,除了NSstring的copy方法是浅copy,其他三种情况都是深copy。

    总结来说:

    1)深copy:也就是内容copy,会从源对象复制一份新的对象出来,新对象计数器为1,源对象的计数器不发生变化。

    2)浅copy:也就是指针copy,只是将指针复制一份给对象,源对象计数器会+1,通常相当于对象retain操作。

    四、自定义对象实现copy

    分两步走:

    1)实现copyying(mutableCopying)协议。

    2)实现copyWithZone方法。

  • 相关阅读:
    全网解析视频接口自行测试
    emlog博客的安装教程
    无需任何软件,简单步骤教你手机投屏到电脑
    关于Windows 10系统重置了但以前的office找不到了问题的解决方法
    java indexOf方法
    JAVA 线程 yield
    android sqlite 增删改[insert、up…
    socket error 错误类型列表
    armeabigcc:error trying to& ex…
    android setBackgroundColor
  • 原文地址:https://www.cnblogs.com/zhouliweiblog/p/4967082.html
Copyright © 2020-2023  润新知