我想创建一个NSMutableDictionary的深层副本并将其分配给另一个NSMutableDictionary。该字典包含一堆数组,每个数组包含名称,键是一个字母表(这些名称的第一个字母)。因此,字典中的一个条目是'A' - >'Adam','Apple'。下面是我在一本书中看到的,但我不知道它的工作原理:一个NSMutableDictionary的深层可变副本
- (NSMutableDictionary *) mutableDeepCopy
{
NSMutableDictionary * ret = [[NSMutableDictionary alloc] initWithCapacity: [self count]];
NSArray *keys = [self allKeys];
for (id key in keys)
{
id oneValue = [self valueForKey:key]; // should return the array
id oneCopy = nil;
if ([oneValue respondsToSelector: @selector(mutableDeepCopy)])
{
oneCopy = [oneValue mutableDeepCopy];
}
if ([oneValue respondsToSelector:@selector(mutableCopy)])
{
oneCopy = [oneValue mutableCopy];
}
if (oneCopy == nil) // not sure if this is needed
{
oneCopy = [oneValue copy];
}
[ret setValue:oneCopy forKey:key];
//[oneCopy release];
}
return ret;
}
- 应在[onecopy发行]是有或没有?
这里是我要如何调用此方法:
self.namesForAlphabets = [self.allNames mutableDeepCopy];
可以吗?或者它会导致泄漏? (假设我将self.namesForAlphabets声明为属性,并在dealloc中释放它)。
谢谢,但“副本”使新的字典中的NSArray(或NSMutableArray)不可变。所以这是行不通的。 – 2009-12-23 04:54:40
用'mutableCopy'代替'copy',这很好。 – 2009-12-23 05:25:32
啊,是的。抱歉!那肯定是'mutableCopy'。我在我的答案中做了修改。 – 2009-12-23 14:59:11