清除复制的字典

时间:2016-08-13 12:44:32

标签: ios objective-c nsdictionary

最近我创建了一个关于清除字典的帖子,形成了像key-> value(NSArray)。

我有2个NSDictionary,第一个是数据,第二个应该包含来自第一个的所有键,但是该键的空数据。稍后将添加/删除数据。这是我如何从主数据dict(self.viewModel.releaseDict)创建副本:

_releaseFormsDictCopy = [NSMutableDictionary dictionaryWithDictionary:self.viewModel.releaseDict];

当我检查时,那些对象(2个NSDictionaries)有不同的内存。

然而,当我用方法“清除”副本时:

-(void)clearAllArraysInsideKeys{

    for(id key in self) {
        NSMutableArray *arr = [self objectForKey:key];
        [arr removeAllObjects];
    }
}

它似乎会刷新两个词典中的所有数据,而不仅仅是复制。如何防止首先清除NSDictionary?

1 个答案:

答案 0 :(得分:1)

您的词典可能是不同的实例,但它们的内容仍然是相同的实例 - 您创建了一个浅(可变)副本。根据您的描述,您需要的是深层副本,其中词典是不同的实例,它们包含的每个数组都是不同的实例。

简单选项是仅深度复制该级别。创建一个空的NSMutableDictionary,然后枚举self.viewModel.releaseDict,并为每个键添加mutableCopy的值。

这将是字典的“深层”副本,包含它所包含的每个数组的“浅层”副本。