2010-05-06 3 views
0

Mon UIButton a son image d'arrière-plan configurés comme ceci:UIButton setBackgroundImage consomme ne libère pas de mémoire?

[myImageButton setBackgroundImage:[UIImage imageNamed:myImageName] forState:UIControlStateNormal]; 

myImageButton est une propriété de la classe retenue, et est configuré avec IB. Aucun autre endroit n'est accessible dans l'application.

myImageName est simplement un NSString avec un nom de fichier comme @ "myImage_number_1.png"

Je suis le chargement de grandes images, 1024 x 1024 taille. Lorsque la vue est affichée, elle change l'image avec l'instruction ci-dessus, puis la mémoire disponible diminue.

Après avoir vu l'affichage de 7 à 9 fois, l'application se bloque avec un avertissement de mémoire. Je pensais que la méthode libérerait l'image chargée.

La vue elle-même est seulement instanciée et allouée une fois, donc elle n'est pas dans le cycle de conservation/libération si le contrôleur de vue.

Y a-t-il quelque chose à propos de cette image de setBackground que je ne sais pas qui l'empêche de libérer de la mémoire?

Répondre

4

Ah, je l'ai trouvé. Chaque fois que l'imageNamed est utilisée pour charger une image, elle met en cache l'image en mémoire. Je suis passé à imageWithContentsOfFile - il ne cache pas les images.

0

Pour les futurs codeurs, la réponse @just_another_coder est correcte, mais il y a quelque chose que vous devriez tous savoir. [UIImage imageNamed: myImageName] charge l'image dans un cache système spécial, puis les futurs appels avec ce chemin d'image renvoient l'image dans le cache au lieu de la recharger à partir du disque. [UIImage imageWithContentsOfFile] charge simplement l'image sur le chemin que vous spécifiez, mais ne fait pas de mise en cache. Plusieurs appels à imageWithContentsOfFile pour la même image entraîneront plusieurs copies en mémoire.

Alors vous devriez penser à celui que vous préfères, et si vous utilisez imagewithcontentsoffile vous devriez vous rappeler à zéro sur ce bouton, sinon vous serez condamné à une application toujours plus (sage utilisation de la mémoire)

Questions connexes