如何深度复制自定义对象的NSMutableArray属性



我有一个CustomObject(类型NSObject)有一个NSMutableArray属性。这个属性包含NSDictionary对象。我需要一个深拷贝的属性,以允许在不同的视图控制器编辑;编辑后,我希望将原始属性替换为编辑后的深度复制属性。

我的问题是

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

我现在绕过了这个问题:

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

虽然这在NSMutableArray &NSDictionary实现NSCoding,感觉不太对,对吧?请帮忙:)

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

  1. 代码非常少
  2. 它是自包含的,因此很容易在将来更改

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

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

即使在某些情况下,您也希望运行类似的基于存档的过程,而只是使用属性列表(因此您可以继续编写最少的代码并利用提供的sdk)。

最新更新