Question

J'ai un UITableView qui affiche beaucoup d'images dans les cellules, et je suis heureux de ne pas quitter les performances de défilement. Mon UITableView est quelque chose comme l'application de photo sur l'iPhone. Quelqu'un sait pourquoi les rouleaux app foto iphone sacrément vite que si leur a rien à l'écran.

Quelqu'un a quelques conseils / astuces pour augmenter mes performances / vitesse de défilement?

Était-ce utile?

La solution

Vous devez precache vos images et ne pas faire paresseusement. Lorsque vous faites défiler votre table UITableViewDataSource: cellForRowAtIndexPath: méthode est appelée, et si vous chargez vos images là-bas, alors vous verrez qu'il demande le contenu de la cellule en tant que votre défilement, ce qui crée une latence dans votre application. Essayez de mettre votre cellForRowAtIndexPath faire: quelque chose comme ceci:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );

Vous verrez combien de temps vous dépensez pour obtenir chaque cellule.

Pour contourner ce problème, vous pouvez être aussi complexe que vous devez - si vous avez un beaucoup d'images, vous allez devoir être de plus en plus intelligent. Vous pouvez faire paginée le chargement, où vous garder une trace de la dernière cellule NSIndexPath de la demande, et déterminer si le défilement va vers le haut ou vers le bas et utilisez + NSImage: imageNamed: pour aller chercher à la fois une valeur de page d'images forward (5 images avant de votre position actuelle), ou tout ce qui fonctionne pour vous (en profitant du fait que les gens doivent retourner leur doigt vers le bas au fond de la table à glisser à nouveau, et ainsi la consommation d'éléments de table a des pauses - vous pouvez faire de votre taille de page assez grand pour remplir un simple glissement). Ceci est probablement toujours pas grand, cependant, parce que vous aurez juste souffrir tous vos effets à la fois au lieu d'une charge pour chaque cellule nerveuse.

Vous pouvez rendre le contrôle à l'interface utilisateur rapidement et permettre au système de planifier votre page préextraite d'images en utilisant NSRunLoop: performSelector cible: Argument: ordre: Mode: au large de la principale runloop en utilisant NSImage. imageNamed :, puis lorsque la cellule est demandé si vous aller chercher assez loin, il sera disponible pour afficher

Vous devez être douloureusement conscients des problèmes de mémoire cependant. Si vous trouvez que ce soit un problème, utilisez NSImage: initWithContentsOfFile: , qui nettoiera caches d'image dans des situations de faible mémoire. En fonction de la stratégie utilisée par l'algorithme de l'invalidation du cache ces situations peuvent provoquer un « bégaiement » comme vous purger les caches et doivent recharger votre prélectures invalidés.

Autres conseils

D'excellents résultats de performance de défilement ont été signalés par le sous-classement UITableViewCell et en tirant le contenu de chaque cellule directement. Voir la réponse acceptée pour cette question pour plus de détails et des liens vers des exemples de code.

Le problème ici est la mémoire, vous chargez trop d'images à haute résolution à la fois, l'application foto n'utilise pas tableview il utilise une vue de défilement et il charge seulement un maximum de 3 photos à la fois, si la mémoire n'est pas une préoccupation, si u essaient de faire quelque chose de similaire à l'application foto utiliser une vue de défilement

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top