【问题标题】:How to make a deep copy of an NSMutableArray property of a Custom Object如何制作自定义对象的 NSMutableArray 属性的深层副本
【发布时间】:2015-11-26 06:56:35
【问题描述】:

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

我的问题是:

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

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

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

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

【问题讨论】:

    标签: ios objective-c nsmutablearray deep-copy custom-object


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多