iOS开发之关于浅拷贝和深拷贝

深拷贝和浅拷贝是以是否产生新对象为依据的,不是以拷贝产生的副本类型为依据的。

拷贝

  • 实现拷贝的方法有2个
    • copy:返回不可变副本
    • mutableCopy:返回可变副本
  • 普通对象实现拷贝的步骤
    • 遵守NSCopying协议
    • 实现-copyWithZone:方法
      • 创建新对象
      • 给新对象的属性赋值
  • copy语法目的:改变副本的时候 不会改变源对象。

深拷贝和浅拷贝

hack_appList_result_failed
  • 深拷贝 (mutableCopy)是内容拷贝,会产生一个新的对象
    • 新对象的计数器为1,源对象不会改变
  • 浅拷贝 (copy) 指针拷贝 不会产生新的对象

    • 源对象的计数器+1 copy产生的是不可变副本
    • 由于源对象本身就不可变为了性能着想,copy会直接返回源对象本身
  • 不可变对象调用拷贝

    • 浅拷贝不可变 深拷贝可变
  • 可变对象 调用拷贝 都是深拷贝
    • 所以只有一种情况是浅拷贝:
  • 不可变对象调用copy方法时 在浅拷贝的情况下 copy就相当于retain
  • 注意深拷贝和浅拷贝是以是否产生新对象为一局的,不是以拷贝产生的副本类型为依据的。
要不要鼓励一下😘