最近我创建了一个关于清除字典的帖子,形成了像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?
答案 0 :(得分:1)
您的词典可能是不同的实例,但它们的内容仍然是相同的实例 - 您创建了一个浅(可变)副本。根据您的描述,您需要的是深层副本,其中词典是不同的实例,它们包含的每个数组都是不同的实例。
简单选项是仅深度复制该级别。创建一个空的NSMutableDictionary
,然后枚举self.viewModel.releaseDict
,并为每个键添加mutableCopy
的值。
这将是字典的“深层”副本,包含它所包含的每个数组的“浅层”副本。