Je nettoie mon code dans une application iPhone du répertoire et l'outil Fuites dans Instruments signale que je fuis des objets NSCFString. Voici le modèle que je suivais:Objectif C NSCFString Leaks avec NSMutableArrays
J'ai une classe de personne dans ma demande qui n'a plus rien que les membres de NSString locaux et propriétés associées pour le prénom, le nom, etc.
Mon contrôleur de vue a un Propriété NSMutableArray remplie à partir d'une base de données SQLite dans l'événement searchBarSearchButtonClicked. Ce NSMutableArray est rempli avec les objets Person qui seront utilisés pour remplir mon contrôle tableview. En outre, si l'utilisateur clique sur une personne dans la vue, son objet Personne sera transmis à la vue Détails pour afficher des informations supplémentaires, pas seulement le nom.
Lorsque j'effectue ma première recherche et affiche les résultats, il n'y a pas de fuite de mémoire.
Maintenant, lorsque j'effectue ma deuxième recherche, je voudrais idéalement effacer le NSMutableArray et le recharger avec le nouveau jeu de résultats sans fuites de mémoire. Donc, pour ce faire, je l'appelle removeAllObjects sur ma propriété PersonList puis appelle la base de données pour repeupler la PersonList NSMutableArray comme indiqué ci-dessous:
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
En appelant removeAllObject J'ai réussi à se débarrasser des fuites que je l'habitude d'avoir qui étaient associés aux objets Person. Cependant, il semble que je fuit maintenant les objets NSString laissés par les propriétés des objets Person individuels.
Est-ce possible? Je suis novice dans l'outil Instruments, mais d'après ce que je peux voir à partir des détails étendus lorsque j'exécute une des fuites de NCSFString, la dernière ligne de code pointe souvent vers la ligne de code @synthesize pour la propriété, tels que:
@synthesize firstName;
Alors, voilà pourquoi je pense que ces NSStrings ne reçoivent pas nettoyé. Y at-il une meilleure façon de faire cela qui ne produit pas de fuites de mémoire?
Si vous pouvez publier le code pour votre classe Personne, il peut être plus facile de diagnostiquer ce qui se passe. – Mark