2010-08-23 4 views
0

Mon application se bloque en raison de la faible mémoire [niveau d'avertissement de mémoire reçu 1 + 2]problème de mémoire au sujet UIImageView sur IPhone 4.0/IPad

Pour tracer cela, je l'ai utilisé l'instrument et de venir avec des points suivants

Test enviorment: contrôleur de vue unique sur la fenêtre ajouté

  1. Quand je ne l'utilise pas le Real Memory UIImageView est utilisé 3,66 MB

  2. Lorsque j'utilise UIImageView avec une image de taille 25 KB: Real Memory est utilisé 4.24 MB. presque 560 Ko de plus quand comparer avec w/o UIImageView et qui continuent à ajouter car j'ajoute plus de UIImageview sur la vue.

est un exemple de code ci-dessous pour ajouter UIImageView que je me réfère

UIImageView* iSplashImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-Landscape.png"]]; 
iSplashImage.frame = CGRectMake(0, 0, 320, 480); 
[self.window addSubview:iSplashImage]; 

ET

dealloc

if(iSplashImage) 
{ 
    [iSplashImage release]; 
    iSplashImage = nil; 
} 

problème est le 560 KB ne reçoit pas la libération et après quelques l'application de temps reçoit un avertissement de mémoire faible. Est-ce que quelqu'un peut signaler si je manque quelque chose ou faire autre chose. Comme mon application utilise beaucoup d'images dans une session.

Merci à l'avance,

Sagar

Répondre

1

Vous appelez [iSplashImage removeFromSuperview] ou lissée comme celui-ci? image a besoin de plus de mémoire que le fichier, car il est décompressé dans mémoire- 320x480x4 = 600Kb

+0

Merci Nickolay pour répondre. en ce moment, je n'appelle pas [iSplashImage removeFromSuperview], cela provoque-t-il une fuite de mémoire? sur le calcul 320 * 480 * 4 est-il comme [horzontal * taille * du fichier vertical]? –

0
if(iSplashImage) 
{ 
    [iSplashImage release]; 
    iSplashImage = nil; 
} 

pas votre question, mais je suis assez sûr que [iSplashimage release]; que tout cela en une seule ligne. if iSpashImage = nil le message sera évalué à un non-proc. iSplashImage à ce stade est juste un pointeur, donc que ce soit nul ou pas n'a pas d'impact sur la mémoire.

+0

Vous avez raison Fogel. le but derrière cela est « Quand nous allons essayer d'accéder iSplashImage (après la suppression de ref peut contenir quelques informations des ordures) non initialisé nous pouvons ajouter le cas comme si (iSplashImage) { // Do avec iSplashImage } il va éviter les accidents inutiles. –