Je reçois des rapports de fuites de mémoire dans mon application, mais je ne peux pas savoir exactement ce qui se passe. J'ai une fonction qui sort une vieille vue et permute dans une nouvelle vue. Je n'utilise pas NavControllers ni aucune @properties; Je gère directement ma fenêtre de haut niveau.Suivi des fuites de mémoire de cacao
-(void)swapInView:(UIViewController*)newViewController
{
[currentViewer.view removeFromSuperview];
printf("Old viewController (%p) has count of %d; now releasing\n",
currentViewer, [currentViewer retainCount]);
[currentViewer release];
currentViewer = 0;
currentViewer = newViewController;
[currentViewer retain];
[mainWindow addSubview:currentViewer.view];
[mainWindow bringSubviewToFront:currentViewer.view];
}
Quand exécuter le code, je montre que le contrôleur d'affichage actuel est désallouée, et ma méthode dealloc pour ce contrôleur de vue est appelé se. Mais, Instruments/leaks le signale toujours comme une fuite. Par exemple, je reçois cette copie papier:
Old viewController (0x119f80) has count of 1; now releasing
Deallocating WelcomeScreenViewController
Je peux vérifier à l'adresse, que ce soit le même objet alloué précédemment.
Mon code externe ressemble à ceci:
MyViewController *theViewController = [[MyViewController alloc]
initWithNibName:nil
bundle:nil];
[GameMaster swapInNewView:theViewController];
[theViewController release];
Quelqu'un at-il des suggestions sur la façon de traquer ce qui se passe? J'utilise le SDK 3.1.2, mais je le voyais aussi sur les SDK précédents.
Quelle est la ligne spécifique des Instruments qui fuit? –
[mainWindow addSubview: currentViewer.view]; –
Il semble donc que 'mainWindow' fuit une sous-vue ajoutée. Appelez-vous release sur 'mainWindow' à un moment donné? –