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:
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.