Je déteste poser des questions de gestion de la mémoire - toutes les bonnes réponses sont des variations sur RTFM. Mais celui-ci me bouscule.problème de mémoire mgmt dans le dictionnaire complexe
J'ai un dictionnaire (relativement) complexe dans ma classe de modèle, où chaque clé pointe vers un tableau de tableaux. Je constamment ajouter et supprimer articles, selon l'état. Chaque "élément" est un tableau.
- (void)addToDictionary:(NSNumber *)itemID {
// get what we need (associated array of arrays & key) from the incoming ID
NSArray *incomingArray = [self getArrayFromID:[itemID intValue]];
NSString *myKey = [incomingArray objectAtIndex:0];
NSMutableArray *myNewArray = [[NSMutableArray alloc] init];
// case 1: this key is not in the dictionary yet
if ([[myDict allKeys] containsObject:myKey] == NO) {
[myNewArray addObject:incomingArray];
[myDict setObject:myNewArray forKey:myKey];
// case 2: key already there; add new array to its array
} else {
myNewArray = [NSMutableArray arrayWithArray:[myDict objectForKey:myKey]];
[myNewArray addObject:incomingArray];
[myDict removeObjectForKey:myKey];
[myDict setObject:myNewArray forKey:myKey];
}
// why isn't this line working??
[myNewArray release];
}
Ma question est la dernière ligne. J'ai alloué ce tableau pour m'aider à travailler avec le dictionnaire, et maintenant je n'en ai plus besoin. Mais le programme va planter si je le libère, et fonctionne très bien si je commente cette ligne. Qu'est-ce que je rate? TIA
'si ([[mondict AllKeys] containsObject: myKey] == NO)' doit être écrit 'si ([mondict objectForKey: myKey] == néant) ' – user102008