2015-12-26 1 views
1

J'utilise un NSCollectionView (avec un NSCollectionViewLayout personnalisé comme disposition) pour parcourir potentiellement des milliers d'images locales (sur disque). Quelle est la meilleure façon de s'assurer que le défilement reste fluide et que l'utilisation de la mémoire (du chargement des images à la vue) ne passe pas par le toit?Optimiser la vitesse de défilement et l'utilisation de la mémoire de NSCollectionView plein d'images

Actuellement, chaque objet representated de NSCollectionViewItem est une classe avec une propriété NSImage. J'ai essayé de rendre cette propriété facultative et de charger le fichier image sur viewDidAppear (et de le définir comme nil sur viewWillDisappear) mais cela arrête le chargement des images du tout (viewDidAppear n'est pas appelé avant que la vue parent soit affichée?).

Toute aide très appréciée.

Répondre

1

La mise en cache d'image et les miniatures d'image sont la principale façon de réduire l'utilisation de la mémoire. La mise en cache des images gardera le nombre d'images en mémoire à la fois maximum, ceci peut être accompli avec NSCache ou l'un des différents frameworks tiers de mise en cache d'image disponibles. Les vignettes d'image sont la conversion de l'image en taille réelle en une représentation plus petite, donc lorsque vous faites défiler, vous ne chargez pas toutes les données. Vous pouvez charger l'image complète lorsque vous entrez dans une représentation en plein écran.

Une autre chose est avec le désalignement de l'image. La prémisse générale est que vous voulez dessiner vos images en coordonnées de valeur entière, les valeurs à virgule flottante sont plus difficiles pour le calcul GPU. (Voir ceci SO post)