J'ai un code très simple pour montrer un contrôleur modal (nextController est membre de la classe):L'utilisation dismissModalViewControllerAnimated ne libère la mémoire
nextController = [[InstructionsScreen alloc] initWithNibName:@"InstructionsScreen" bundle:nil];
[self presentModalViewController:nextController animated:YES];
[nextController release];
Et puis, quand le contrôleur doit cacher:
[self dismissModalViewControllerAnimated:YES];
nextController = nil;
Tout fonctionne bien comme prévu, mais quand j'exécute les allocations d'objet instrument, cela montre qu'après avoir ignoré le contrôleur modal, la mémoire allouée n'est pas libérée. Cela devient un problème parce que quand je montre plusieurs contrôleurs la mémoire est terminée ...
Quelqu'un peut-il me donner quelques indices? Clang ne voit aucun problème, je suis donc bloqué par la limite de mémoire, car la mémoire des contrôleurs rejetés ne sera pas libérée.
EDIT: Ce que j'ai découvert jusqu'à présent, c'est qu'il semble être une fuite quelque part dans les affaires d'Apple. Façon de reproduire: XCode -> créer un nouveau projet avec le modèle "Application utilitaire". N'écrivez pas de code vous-même. Il suffit de créer une nouvelle application utilitaire et exécutez-le avec "Attribution d'objets", choisissez de voir "Créé & Encore vivant". Maintenant retournez le contrôleur modal plusieurs fois - vous verrez que la mémoire allouée ne cesse de croître et de se développer chaque fois que le contrôleur modal apparaît et qu'il disparaît aussi ...
Comme je l'ai dit, nextController est membre, pas une propriété: @interface MainScreenViewController: UIViewController { id nextController; } utilisant "release" au lieu d'attribuer à nextController "nil" conduit à une exception: le message viewDidDisappear: envoyé à l'objet libéré. L'objet semble être libéré, mais l'instrument d'allocation d'objet "créé et toujours vivant", montre seulement l'utilisation croissante et croissante de la mémoire. –