2010-12-03 6 views
1

J'ai une propriété UIImageView dans mon contrôleur de vue défini sur "affecter". Chaque fois que j'appuie sur un bouton, je place l'image dans la vue à quelque chose de nouveau. En raison de la façon dont j'utilise un autre composant, je dois supprimer FromSuperView et libérer le UIImageView chaque fois que je change d'image et ensuite je l'ajoute. Cela ne semble pas contribuer au problème de mémoire - lorsque vous utilisez le UIImageView existant et que vous ne le relâchez pas, la mémoire augmente encore (mais il y a des problèmes de dimensionnement, c'est pourquoi je le recréer). Pour une raison quelconque, l'utilisation de setImage augmentera l'utilisation de la mémoire de l'application d'environ 0,8 mégaoctet (la taille de l'image). Lorsque je ne définis pas une image, la mémoire semble rester relativement constante. Des idées pourquoi?Mémoire UIImageView Problème

[self.pictureView setImage: img]; 
[self.pictureView setFrame: CGRectMake(0,0,[img size].width, [img size].height)]; 
[img release]; 

Répondre

1

Je pense que vous le UIImageView une fuite de, et quand vous le fuyez UIImageView, vous êtes l'image dans une fuite elle.

Cela dépend de la manière dont vous recréerez UIImageView. Assurez-vous que vous libérez l'ancienne vue de l'image avant de définir la nouvelle à la propriété.

Il peut être préférable de définir la propriété comme conservée, car lorsque vous définissez une nouvelle valeur pour conserver la propriété, elle libère l'ancienne instance.

+0

J'ai aussi essayé de le conserver et ça ne semble pas aider ... Je fais un removeFromSuperView et je le publie directement avant le code affiché, puis je re-initie la vue comme ceci: self.pictureView = [ [UIImageView alloc] init]; –

+1

hmm, je pense que cela entraîne une double retenue de la valeur. alloc le conserve une fois, la propriété retain le conserve deux fois. Essayez d'appeler autorelease après "alloc] init]" – Danail

+0

Hey, ça (la moitié) l'a corrigé: D Il y a une fuite de plus, mais je pense que c'est sans rapport. Merci! –

0

Peut-être que le paramètre UIImageView est défini sur zéro avant de définir l'image pour effacer la référence?

pictureView.image=nil;