Copy

作者: cmhfx1 | 来源:发表于2017-06-12 15:21 被阅读0次

copy要从几个方面说


以字符串为例,

                                     copy                     mutableCopy

不可变字符串          同一个实例              不同实例,可变

可变字符串           不同实例,不可变      不同实例,可变


以数组为例(集合)

                                    copy                                              mutableCopy

不可变数组        相同集合实例,元素实例                      不同集合实例,相同元素实例,可变

可变数组       不同集合实例,相同元素实例,不可变     不同集合实例,相同元素实例,可变

mutableCopy于可变和不可变对象是一致的,生成新的可变实例(如果是集合,得到集合实例,但是集合元素指向的实例是相同的),copy于不可变对象没有实例生成,于可变对象生成新的不可变实例

ps:我们使用mutableCopy拷贝一个不可变数组,得到不同的集合实例,虽然元素实例相同,但是数组内指向元素实例的指针与之前是不同的,这点要清楚。

对于集合,这还没有完

NSArray 实例方法

- (id)initWithArray: copyItems:;

如果传入YES,会对原数组元素指向的实例进行复制,但也只是一层复制。

例如,原数组元素既有字符串,又有数组。那么,会生成字符串实例和数组实例,但是数组实例中元素指向的实例未变

完全复制?

要想对多层集合对象进行复制,我们需要进行完全复制,这里可以使用归档和接档。

[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:obj]];

自定义类

自定义类的对象,如果想要调用 copy或mutableCopy,则需要遵循NSCopying/NSMutableCopying协议,实现copyWithZone/mutableCopyWithZone方法

相关文章

  • Copy Copy Copy

    说到Copy 大多会想到浅复制(指针复制),深复制(内容复制)。看一张图: 你会发现对于集合类型,深复制那写的是...

  • 2018-09-27

    copy的问题 copy.copy返回浅copy copy.deepcopy返回深copy 1fromcopyim...

  • 关于深copy和浅copy

    深copy 所谓深copy是指内容copy 浅copy 所谓浅copy是指指针copy 集合的单层深copy 在多...

  • golang 值和指针

    地址copy,引用copy 值copy

  • Python的直接赋值,深拷贝和浅拷贝以及使用场景

    概述 深浅拷贝用法来自copy模块导入模块: import copy浅拷贝: copy.copy深拷贝: copy...

  • day 9

    浅拷贝和深拷贝 copy.copy(对象):浅拷贝 copy.deepcopy(对象):深拷贝 copy.copy...

  • day-9-函数基础

    import copy"""copy.copy(对象):浅拷贝copy.deepcopy(对象):深拷贝""" a...

  • 深浅拷贝判断地址是否相同

    导入 import copy 模块 浅拷贝:copy.copy() 深拷贝:copy.deepcopy() 代码:...

  • 内存管理

    ARC MRC 属性 循环引用 深浅copy一 ,先说深浅copy概念很简单 浅copy 就是copy...

  • Python浅拷贝与深拷贝

    Python浅拷贝与深拷贝 讨论import copy中copy.copy与copy.deepcopy区别。 根据...

网友评论

      本文标题:Copy

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