2009-05-09 8 views
1

Premièrement: J'ai implémenté un mécanisme de défilement assez complexe pour les images, qui permet de faire défiler quelques centaines de milliers (théoriquement) dans une seule vue de défilement. Ceci est fait en préchargeant de petites portions lors du défilement, tout en réutilisant tous les UIImageViews. Actuellement, tout ce que je fais est d'assigner de nouveaux objets UIImage créés à ces UIImageViews réutilisés.UIImageView et UIImage: Comment puis-je optimiser les performances?

Il peut être préférable de réutiliser ces objets UIImage en leur transmettant de nouvelles données d'image.

Maintenant, le problème est, que j'utilise actuellement la méthode -imageNamed:. La documentation dit, qu'il met en cache l'image.

Problèmes que je vois dans ce cas avec -imageNamed: Lorsque l'image est déplacée hors de la plage de préchargement, elle n'est plus nécessaire. Ce serait mauvais si elle essaie de mettre en cache des milliers d'images pendant que l'utilisateur fait défiler et défile et fait défiler. Et si je trouvais un moyen d'insérer de nouvelles données d'image dans l'objet UIImage pour le réutiliser, que se passera-t-il avec l'ancienne image qui a été mise en cache?

Donc, il y a une méthode à gauche, qui semble intéressante: -initWithContentsOfFile:

Cela ne cache pas l'image. Et il n'utilise pas -autorelease, ce qui est bien dans ce cas.

Pensez-vous que dans ce cas, il serait préférable d'utiliser -initWithContentsOfFile:?

Répondre

2

Seul un benchmark peut vous le confirmer. Je suis enclin à penser que UIImage cache d'image est probablement extrêmement efficace, étant donné qu'il est utilisé pratiquement partout dans le système d'exploitation. Cela dit avec le nombre d'images que vous affichez, votre approche pourrait aider.

0

Je dirais que oui. Vous avez trop d'images pour les garder toutes dans le cache, donc vous ne pouvez pas utiliser -imageNamed :. Si vos images ne sont pas affichées plusieurs fois, vous n'obtiendrez pas des performances inférieures.