美文网首页
关于deepCopy 和shallowCopy

关于deepCopy 和shallowCopy

作者: Kk太阳 | 来源:发表于2017-03-03 21:21 被阅读54次

本文仅作记录和学习

1. 问题的引入

原来做项目,参数作为对象被另外一个控制器引用,一般都不会对其修改,或者可以修改需要同之前的controller联动,所以之前对于对象的深浅拷贝没有比较深的思考,但最近一段时间做项目,需要一定的联动性,不过是需要保存后才可以进行联动,为保证两控制器中的数据独立,对数据进行深拷贝显得很必要

之前对于深浅拷贝的理解只限于这么几个字浅拷贝是拷贝指针,深拷贝是拷贝内容 ,但是深拷贝我们需要做些什么,他的实现机制如何,什么样的操作属于浅拷贝,什么属于深拷贝,这些问题都值得思考和实践。

下面这张图只是简单说明了下深浅拷贝的区别


2. 深浅拷贝的含义
  • 浅拷贝
    在进行浅拷贝时,会想原始的对象发送retain操作,引用计数加一,同时将原数据的指针拷贝给新的变量。
  • 深拷贝
    深拷贝在我看来可以分成两种,一种是单层深拷贝(不是真的深拷贝,只是拷贝最外边的一层,即one-level-deep copy),另一种是真正的深拷贝。
    实现深拷贝的方式:
    • 使用系统的方法,即initWithArray:copyItems:使用这类的方法,但是这样的方法需要其中的其中的元素都要遵循NSCopying协议,如果使用这类的方法,其中对象不遵从该协议,会在运行时报错。
    • 二是使用归档 ,通过归档和解档实现对数据内存的分割,如
NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
另外一个会涉及到深浅拷贝的
  1. 非集合类对象的copy与mutableCopy
在非集合类对象中:对immutable对象进行copy操作,是指针复制,mutableCopy操作时内容复制;
对mutable对象进行copy和mutableCopy都是内容复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //深复制
[mutableObject copy] //深复制
[mutableObject mutableCopy] //深复制
  1. 集合类对象的copy与mutableCopy
在集合类对象中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy都是内容复制。但是:集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。用代码简单表示如下:
[immutableObject copy] // 浅复制
[immutableObject mutableCopy] //单层深复制
[mutableObject copy] //单层深复制
[mutableObject mutableCopy] //单层深复制

相关文章

  • 关于deepCopy 和shallowCopy

    本文仅作记录和学习 1. 问题的引入 原来做项目,参数作为对象被另外一个控制器引用,一般都不会对其修改,或者可以修...

  • rxjs - shallowCopy

    场景 react,hooks,rxjs,useObservable npc是一个复杂类型,当我修改某个键的值,并直...

  • Python中的copy()

    引用和copy(),deepcopy()的区别

  • Python浅拷贝和深拷贝

    引用和copy(),deepcopy()的区别

  • copy 和 deepcopy

    浅拷贝copy 1.id()查看内存编号执行a = 5id(a) -10965024b = aid(b) - 10...

  • python列表生成式&字典

    #Copy &deepcopy from copyimport deepcopy list1=[1,2,3,4] ...

  • js深拷贝和浅拷贝

    deepcopy

  • deepCopy

    因为传递的数据 data 是一个复杂的数组结构,克隆它要使用深拷贝,因为浅拷贝数据仍然是引用关系,会破坏源数据。所...

  • Python copy

    浅拷贝copy.copy() 深拷贝copy.deepcopy() List Slicing [:]和List转换...

  • deepcopy 和 copy的区别?

    copy 仅拷贝对象本身,而不拷贝对象中引用的其它对象。 deepcopy 除拷贝对象本身,而且拷贝对象中引用的其...

网友评论

      本文标题:关于deepCopy 和shallowCopy

      本文链接:https://www.haomeiwen.com/subject/uxgrgttx.html