我有一个CustomObject(类型NSObject)有一个NSMutableArray属性。这个属性包含NSDictionary对象。我需要一个深拷贝的属性,以允许在不同的视图控制器编辑;编辑后,我希望将原始属性替换为编辑后的深度复制属性。
我的问题是
- 我需要做一个深'copyWithZone'吗?
- ,如果是这样,我如何实现它考虑到它只是一个属性,需要深度复制?
我现在绕过了这个问题:
NSMutableArray *deepCopyArray = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:<CustomObject>instance.<propertyToDeepCopy>]]];
虽然这在NSMutableArray &NSDictionary实现NSCoding,感觉不太对,对吧?请帮忙:)
这是一种可以接受的方式,有多种优点:
- 是
- 代码非常少
- 它是自包含的,因此很容易在将来更改
任何替代方法都意味着你要遍历内容并手动复制所有内容,有几个原因可以这样做:
- 你知道什么是真正不可变的,你可以避免复制
- 你需要可变容器(数组中的字典)
即使在某些情况下,您也希望运行类似的基于存档的过程,而只是使用属性列表(因此您可以继续编写最少的代码并利用提供的sdk)。