Я пытаюсь создать глубокую копию NSMutableDictionary и назначить ее другому 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 release] там или нет?
-
Вот как я буду называть этот метод:
self.namesForAlphabets = [self.allNames mutableDeepCopy];
Будет ли это нормально? Или это может вызвать утечку? (предположим, что я объявляю self.namesForAlphabets как свойство и освобождаю его в dealloc).