2009-09-28 4 views
0

Est-ce que UIImage supprime des images de son cache? Puis-je garder un pointeur sur une image que j'ai obtenue de imageNamed: et l'utiliser aussi longtemps que j'aime ou dois-je toujours appeler imageNamed:?Comportement de cache de UIImage

Répondre

2

L'objet UIImage renvoyé par imageNamed: est traité comme tous les autres objets en fonction de la gestion de la mémoire. Si vous souhaitez conserver la référence à l'objet entre les appels de méthode, vous devez le retain et release lorsque vous avez terminé de décrémenter le nombre de références.

UIImage * cachedImage; 

-(void) getTheImage { 
    UIImage * cachedImage = [[UImage imageNamed:@"MyImage.png"] retain]; 
    //Do something with the image... 
} 
//In some other method or dealloc 
[cachedImage release]; 

Notez également que le UIImage class reference dit:

Dans les situations à faible mémoire, des données d'image peut être purgés d'un objet UIImage à libérer de la mémoire sur le système. Ce comportement de purge affecte uniquement les données d'image stockées en interne par l'objet UIImage et non l'objet lui-même. Lorsque vous tentez de dessiner une image dont les données ont été purgées, l'objet image recharge automatiquement les données de son fichier d'origine. Cette étape de charge supplémentaire de peut toutefois entraîner une pénalité de performance faible.

0

UIImage met en cache les données elles-mêmes. Vous ne devez pas tenir un pointeur et simplement le contourner. Cela peut être dangereux car quand il y a un avertissement de mémoire et qu'il n'y a pas de référence forte à cet objet, UIImage va purger les données mises en cache. Appelez [UIImage imageNamed:] à chaque fois. C'est rapide et renvoie la référence à l'image de la mémoire. Si l'image n'est plus en mémoire, elle la recharge et transmet cette réf.