40 votes

Est-il possible d'effacer le cache utilisé par la classe UIImage?

Il est bien connu que UIImage cache les données d'image lorsque l'image est chargée à l'aide de l' imageNamed: méthode.

À partir de la documentation d'apple:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006890-CH3-SW10

imageNamed:

Discussion: Cette méthode ressemble à la système de cache pour une image de l'objet avec le nom spécifié et retourne que objet, si elle existe. Si une correspondance l'image de l'objet n'est pas déjà dans le cache, cette méthode de charger l'image données à partir du fichier spécifié, les caches ilrenvoie ensuite l'résultant objet.

À cause de cela, après le chargement de plusieurs images avec imageNamed: j'ai remarqué une forte augmentation de l'utilisation de la mémoire et aussi que la mémoire a été conservée dans de l'utiliser même après que le contrôleur qui a chargé les images dealloc. (au moins, il n'a pas augmenté à nouveau quand je alloc le même contrôleur)

Qui m'a fait me demander si il existe un moyen de vider le cache utilisé par UIImage par programme à un moment donné de ma vie de l'application, voire de contrôler certains paramètres de cache (comme la quantité maximale de mémoire qu'il peut utiliser, par exemple)

Je sais que je pourrais facilement résoudre ce problème en utilisant initWithData, imageWithData, imageWithContentsOfFile ou de toute autre initialiseur au lieu de imageNamed, mais ce comportement du cache est souhaitée lors de l'utilisation de plusieurs images, comme l'intérieur d'un UITableView.

Toute réflexion sur la façon de le réaliser?

EDIT: Après quelques réponses, je tiens juste à préciser qu'il y a un énorme fossé entre la nécessité de faire quelque chose et d'avoir la possibilité de faire quelque chose. Comme je l'ai souligné, je sais que l'OS prend soin de mettre en cache pour moi, j'essaie juste de voir les limites que le SDK iOS impose.

7voto

XJones Points 14327

Je ne connais aucun moyen d'effacer manuellement ce cache géré iOS. En général, c'est un hareng rouge. Lorsque le système d'exploitation gère quelque chose pour vous, vous n'avez pas à vous en préoccuper. Tant que vous relâchez correctement tout ce que vous allouez / conservez et que vous gérez correctement les avertissements relatifs à la mémoire, vous faites votre part.

3voto

Felipe Sabino Points 7853

Réponse tirée de Kevin Low commentaire


Si vous pouvez utiliser des API privées (comme dans une application réservée aux AdHoc, par exemple), utilisez cette méthode UIImage pour supprimer toutes les images du cache.

 [UIImage _flushSharedImageCache];
 

0voto

Mike Weller Points 28387

Le cache sera vidé le cas échéant, c'est-à-dire lorsque l'application recevra un avertissement de faible mémoire. Vous n'avez aucune raison de le faire vous-même et aucune API publique n'est disponible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X