什么可能是在Objective-C中制作Collection对象的深层副本的合适方法?

时间:2012-07-24 14:50:02

标签: objective-c collections deep-copy

复制方法只生成浅拷贝,即集合本身的新副本,而不是存储在内部的所有对象。我正在研究的这本书建议使用archive来创建深层拷贝,即使用NSKeyedArchiver将集合对象保存到NSData对象,然后使用NSKeyedUnarchiver将其加载回另一个集合对象。这种方法有效,但我不确定处理大型集合对象的效率如何。还有其他深度复制方法可能效果更好吗?

好的,这就是我想知道的:

  1. 任何涉及编码较少的方法?
  2. 任何更高CPU效率的方法?
  3. 任何可以同时实现的方法? :P

2 个答案:

答案 0 :(得分:3)

@dasblinkenlight说的是什么......

NSKeyedArchiver特别针对大型对象图设计。如果您对对象图具有高度专业化的知识,那么当然可以构建更高效的东西,但除非您遇到非常特殊的问题,否则这几乎总是错误的。

你的书是对的。使用存档程序创建深层副本。

答案 1 :(得分:1)

我不确定数字,但NSKeyedArchiver路线的计算成本并不高。看起来好像很长,但实际上并不比定制的东西效率低得多(如@Rob Napier所说)。然而,它更多可重复使用

如果仍有疑问,一个有趣的实验可能是一个大而简单的数据集的深层副本,以及与定制内容相关的时间。