如何制作自定义对象的 NSMutableArray 属性 的深拷贝

How to make a deep copy of an NSMutableArray property of a Custom Object

我有一个具有 NSMutableArray 属性 的 CustomObject(NSObject 类型)。 属性 包含 NSDictionary 对象。我只需要 属性 的深层副本以允许在不同的视图控制器中进行编辑;编辑后,我想用编辑后的深度复制 属性 替换原来的 属性。

我的问题是:

  • Do I need to make a deep 'copyWithZone' ?
  • and if so, how do I implement it considering that it's just the single property that requires deep copying?

我现在通过以下方式规避了这个问题:

NSMutableArray *deepCopyArray = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:<CustomObject>instance.<propertyToDeepCopy>]]];

虽然这可以作为 NSMutableArray 和 NSDictionary 实现 NSCoding,但感觉不对,是吗?请帮助:)

这是一个可以接受的方式,有很多优点:

  1. 有效
  2. 简单明了
  3. 代码很少
  4. 它是独立的,因此将来很容易改变

任何替代方法都意味着您要遍历内容并自己手动复制所有内容,您这样做的原因可能有以下几个:

  1. 你知道什么是真正不可变的,你可以避免复制
  2. 您需要可变容器(数组中的字典

虽然即使在某些情况下,您也希望 运行 一个类似的基于存档的过程,而只是使用 属性 列表(这样您就可以继续编写最少的代码并利用提供的 SDK) .