Mon application s'exécute dans Instruments en prenant environ 700 Ko de Live Bytes en moyenne en cours d'exécution. Cependant, chaque fois qu'il charge une nouvelle image en plein écran, les allocations de mémoire sautent d'environ 10 Mo pendant une seconde, puis récupèrent au niveau normal de 700 Ko. Ceci est correct au début, mais une fois qu'il est arrivé plusieurs fois je reçois des avertissements de mémoire et l'application se ferme, même si le total des octets de vie se stabilise bien sous la marque de 1 Mo.Chargement de l'image Retina en plein écran sur l'iPad provoque un pic massif de 10 Mo
J'ai créé un projet de test pour voir pourquoi cela se produit. Il est une application simple avec seulement le code suivant dans le contrôleur Vue:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *imgFile = [[NSBundle mainBundle] pathForResource:@"00-bg" ofType:@"png"];
UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgFile];
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:img];
[img release];
[self.view addSubview:backgroundImageView];
[backgroundImageView release];
}
La sortie des instruments (Fuites) ressemble à ceci:
J'ai essayé à la fois ARC et non-ARC, et la seule différence est la longueur de la pointe (ARC semble retenir plus longtemps la mémoire). J'ai également essayé UIImage imageNamed:
et initWithContentsOfFile:
mais les résultats sont les mêmes.
Pourquoi cette pointe se produit-elle? Et y a-t-il quelque chose que je puisse faire pour l'éviter?
Je ne suis pas sûr que ce soit possible, allez-vous s'il vous plaît essayer de passer par l'arbre d'appel jusqu'à l'allocation et spécifier la fonction qui cause réellement les pointes? –
Malheureusement, je ne peux pas trouver le pic dans l'arbre d'appel parce qu'il est déjà parti avant que je puisse vérifier. – jowie