Je sens que je ne comprends pas quelque chose de fondamental ici. J'ai travaillé sur la gestion de la mémoire dans mon application tout en utilisant des instruments pour vérifier les allocations en direct. J'ai un contrôleur de vue modale (settingsViewController) qui a une image pour un arrière-plan. Une chose que j'ai remarqué était que même après paramètresViewController dealloc est appelé, il ya encore un live Malloc 520 KB, ImageIO est la bibliothèque responsable. Je m'attends à ce que la mémoire vive redescende après avoir ignoré settingsViewController. Le UIImageView traîne-t-il quelque part?Utiliser des instruments pour améliorer la gestion de la mémoire avec les contrôleurs de vue modale
Voici comment je charge l'image dans viewDidLoad,
ainsi que de fermer le contrôleur de vue lorsque j'ai terminé.
- (void)loadView {
[super loadView];
////// background ////////
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"settings_background.png"]];
[self.view addSubview:background];
[background release];
//////////////////////////
}
- (void)viewDidLoad {
[super viewDidLoad];
///////// done button //////////
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)];
self.navigationItem.leftBarButtonItem = done;
[done release];
////////////////////////////////
}
- (void) doneButtonPressed {
[self dismissModalViewControllerAnimated:YES];
}
- (void)dealloc {
NSLog(@"settingsViewController dealloc"];
[super dealloc];
}
À ce stade, cela est tout ce qui est dans le settingsViewController, donc pas besoin de faire quelque chose de spécial dans dealloc
, non? Voici comment je montre testViewController dans le rootViewController. Je voudrais m'assurer de comprendre ce qui se passe avant d'aller de l'avant. J'ai plusieurs contrôleurs de vue modale différents, chacun avec une image différente en arrière-plan. Depuis que chacun crée un Malloc 520 Ko, je finis par utiliser 2-3 Mo de mémoire précieuse sans raison valable. Qu'est-ce qui tient à ce 520 Ko? Lorsque vous utilisez la méthode +[UIImage imageNamed:]
, l'infrastructure met en cache les données d'image pour vous.