2

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

我的问题是:

  • 我需要做一个很深的“copyWithZone”吗?
  • 如果是这样,考虑到它只是需要深度复制的单个属性,我该如何实现它?

我现在已经通过以下方式规避了这一点:

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

虽然这可以作为 NSMutableArray 和 NSDictionary 实现 NSCoding,但感觉不是正确的方式,或者是吗?请帮助:)

4

1 回答 1

0

这是一种具有多种优点的可接受方式:

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

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

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

尽管即使在其中一些情况下,您也希望只使用属性列表来运行类似的基于存档的过程(因此您继续编写最少的代码并利用提供的 SDK)。

于 2015-09-01T07:00:21.257 回答