J'utilise une classe NSXMLParser dans mon programme et je lui assigne un délégué. Ce délégué, cependant, est retenu par la méthode setDelegate: résultant en un mineur, mais ennuyant :-), fuite de mémoire.Délégué de NSXMLParser et fuite de mémoire
Je ne peux pas libérer la classe de délégué après le setDelegate: parce que le programme va planter.
Voici mon code:
self.parserDelegate = [[ParserDelegate alloc] init]; //retainCount:1
self.xmlParser = [[NSXMLParser alloc] initWithData:self.xmlData];
[self.xmlParser setDelegate:self.parserDelegate]; //retainCount:2
[self.xmlParser parse];
[self.xmlParser release];
ParserDelegate est la classe déléguée.
Bien sûr, si je définis 'self' comme délégué, je n'aurai aucun problème mais j'aimerais savoir s'il existe un moyen d'utiliser une classe différente en tant que délégué sans fuites.
Merci d'avance.
Donc je ne devrais pas m'inquiéter même si cela montre comme une fuite dans les instruments? De plus, puisque j'arrive à retainCount: 2 après la méthode 'setDelegate:' (d'après Instruments), quand le compte passe-t-il à 0? –
C'est très étrange que vous obteniez une seconde retenir. Vous dites qu'il se bloque si vous avez cette version dans le code ci-dessus, ou lorsque vous ajoutez une seconde version pour contrer le 2 retenir nombre? Si ce dernier, il semble que quelque chose d'autre le retient. – bobDevil
Le premier. Il se bloque si je le libère juste après la [release self.xmlParser]. Pourrait-il y avoir un bug dans l'outil Instruments? Je n'arrive pas à comprendre comment 'setDelegate' retient le délégué ... –