J'ai un grand NSDictionary avec un NSDictionary plus petit à l'intérieur. Je veux libérer le plus gros et retenir le second. J'ai ce code dans ma méthode init:Objectif-C: Conserver un NSDictionary dans un NSDictionary autoreleased
// Autoreleased stage dictionary NSString *plistPath = [[NSBundle mainBundle] pathForResource:map ofType:@"plist"]; NSDictionary *mapDict = [NSDictionary dictionaryWithContentsOfFile:plistPath]; // Owned items citiesDictionary = [[mapDict objectForKey:@"Cities"] retain];
citiesDictionary est déclaré dans l'interface de classe comme:
NSDictionary *citiesDictionary;
Si j'essaie de libérer citiesDictionary en dealloc utilisant la ligne suivante, il se bloque.
[citiesDictionary release];
Mais si je ne dealloc citiesDictionary, je reçois une fuite de mémoire rapportée dans Instruments quand je dealloc la classe contenant citiesDictionary. Je reconnais que mapDict est désaffecté à la fin de init. Est-ce que cette désaffectation affecte citiesDictionary même si j'ai appelé retenir?
Si oui, comment puis-je conserver le plus petit dictionnaire tout en libérant le plus grand contenant? J'ai essayé différentes choses lors de l'attribution de citiesDictionary, mais rien ne semble fonctionner correctement. Certaines des approches que j'essayé:
citiesDictionary = [[mapDict objectForKey:@"Cities"] copy];
et
citiesDictionary = [NSDictionary initWithDictionary:[mapDict objectForKey:@"Cities"]];
et même
citiesDictionary = [NSDictionary initWithDictionary:[[mapDict objectForKey:@"Cities"] copy]];
Toute aide est appréciée. Je vous remercie.
J'accepterais votre propre réponse et voterais les réponses qui vous ont aidé à le comprendre. –
Déjà levé les a votés, merci. –