Je suis confronté à de graves fuites de mémoire dans l'une de mes applications que je construis. J'ai un UINavigatonController qui est dans un UITabBarview. À l'intérieur de la NavView est une vue MKMap. Lorsque vous cliquez sur un bouton d'accessoire dans une légende, une vue détaillée est chargée. Dans cette vue détaillée, j'essaie de remplir une table à partir d'une plist en utilisant une boucle for (object in array). Le plist est un tableau de dictionnaires. Je cours par le biais des dictionnaires pour en trouver un avec une clé qui est le titre de la légende, puis obtenir un tableau à l'intérieur de ce dictionnaire. Tout fonctionne très bien dans la simulaor mais je reçois des fuites massives de mémoire en le faisant comme je suis. Une idée de ce qui se passe? HolderArray est un ivar, tout comme le tableau de routes. Comme vous pouvez le voir, j'ai essayé quelques façons d'allouer les chaînes et les réseaux, mais tous semblent donner les mêmes fuites. Selon l'outil de performance, je fuis de NSCFString, NSCFDictionary, et le NSCFArry. J'ai lancé le routeArray dans le dealloc et ça marche bien, mais si je libère holderArray il se bloque quand je retourne à ma carte depuis la vue détaillée. Je suppose que je ne suis vraiment pas sûr de la façon de traiter les chaînes et le dictionnaire utilisés dans la boucle for.Memory Leak lors de l'utilisation pour (objet dans le tableau) avec iPhone SDK
Juste pour ajouter la vue détaillée est créé comme ceci:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{
NSString *selectedRouteName = [NSString stringWithFormat:@"%@",view.annotation.title];
RouteDetailView *rdc = [[RouteDetailView alloc] initWithNibName:@"RouteDetailView" bundle:nil];
[rdc setCurrentRoute:selectedRouteName];
[self.navigationController pushViewController:rdc animated:YES];
[rdc release];
}
Désolé si aucune de ce qui précède est peu claire. Faites le moi savoir et je peux essayer de le reformuler.
Oui testString sera vrai au plus une fois. La raison pour laquelle je n'ai pas publié holderArray à l'origine était parce que quand je voudrais l'application se bloque lorsque vous revenez sur le navController. J'ai ajouté la pause et remplacé la version pour holderArray et il semble fonctionner. Merci de votre aide. Mon esprit est allé à bouillir après avoir réglé d'autres problèmes jusqu'à 4 heures du matin que celui-ci m'a rendu fou, et pourtant la réponse était si simple. –