Je suis en train de créer une copie en profondeur d'un NSMutableDictionary et de l'affecter à une autre NSMutableDictionary. Le dictionnaire contient un tas de tableaux, chaque tableau contenant les noms, et la clé est un alphabet (la première lettre de ces noms). Donc une entrée dans le dictionnaire de l'est 'A' -> 'Adam', 'Pomme'. Voici ce que j'ai vu dans un livre, mais je ne suis pas sûr si cela fonctionne:
- (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;
}
- le [onecopy de presse] être là ou pas?
-
Voici comment je vais faire appel de cette méthode:
auto.namesForAlphabets = [self.allNames mutableDeepCopy];
Est-ce ok? Ou sera-ce la cause d'une fuite? (supposons que je déclare de soi.namesForAlphabets comme une propriété, et de le libérer dans le dealloc).