当我更改原始数组时,克隆的NSArray会发生变异

时间:2016-08-29 06:42:28

标签: nsarray xcode7 allocation

在我的应用程序中,我有一个视图,我应用过滤器。因此,当我回来更改过滤器但不按下“应用”按钮和“后退”按钮时,我希望原始过滤器仅在我现在更改之前应用这些过滤器。

EG。过滤器 - 城市 - A,B,C - 应用 - 保存A,B,C过滤器 再来一次过滤器 - 城市 - D,E - 按下后退按钮 - 重新获得A,B,C过滤器

为此我正在做的就是当打开filterview的viewdidload时,我将filters数组保存到克隆数组中

clonedFiltersData = [[NSMutableArray alloc] initWithArray:[[WMGFilterManager sharedManager] arrayForType:type]];

这工作正常,但是当我改变某些东西时 [[WMGFilterManager sharedManager] arrayForType:type]

就像删除一些过滤器或东西一样,它实际上会从原始数组中删除。任何人都可以告诉如何启动数组,使其不受其引用的影响。

1 个答案:

答案 0 :(得分:0)

将copyItems:YES选项添加到initWithArray。如本例所示;

  NSArray *deepCopyArray=[[NSArray alloc] initWithArray:someArray copyItems:YES];

您需要深层复制,而不是浅层复制(复制指针)。