2009-09-22 4 views
0

J'utilise plusieurs images pour styler UITableViewCells et je veux m'assurer que je fais les choses correctement, d'une part pour assurer une bonne gestion de la mémoire, et d'autre part pour m'assurer que les choses sont aussi rapides que possible (J'ai des problèmes avec la lenteur du défilement!).UIImage Performance et optimisation avec UITableViews

Je sais que l'utilisation de [UIImage imageNamed:] mettra les images en cache pour la vitesse, alors est-ce acceptable d'utiliser toutes ces images? Ou est-il préférable de ne l'appeler qu'une seule fois par UITableViewController et de stocker l'image en tant que variable d'instance, en réutilisant le même objet UIImage pour toutes mes cellules? J'utilise des PNG transparents et des vues colorées claires dans ma table et mes cellules pour obtenir le look que je veux. Y a-t-il des conseils pour s'assurer que le rendu est le plus rapide possible pour s'assurer que le défilement de la vue de la table est fluide? Pour le moment, je n'ai que 10 lignes (cellules) et c'est déjà assez lent. J'utilise un contrôleur de résultats récupéré pour obtenir mes données, donc je ne pense pas que cela puisse être la cause.

Un grand merci,

Michael

Répondre

1

L'astuce pour l'utilisation de la transparence est non. Si vous avez plusieurs éléments qui se chevauchent, voyez s'il existe un moyen de pré-rendre l'effet transparent - c'est-à-dire, plus que presque tout, ce qui va tuer les performances de défilement de la table.

L'autre grand succès est si vous ne réutilisez pas correctement les cellules.

Le contrôleur de résultats récupérés ne devrait rien faire pour ralentir les choses. Vous pouvez essayer d'utiliser les instruments pour en assurer ...

+0

Est-ce que le problème est simplement d'avoir une cellule opaque avec un dégradé et 2 UILabels transparents (Similaire au UITableViewCellStyleSubtitle)? Pour moi, cette configuration est encore assez lente à faire défiler et à faire glisser. C'est dommage si c'est vrai! –

+0

Oui, c'est exactement le problème. Au fur et à mesure qu'il défile, il redessine tout ça ... Pensez à mettre tout cela dans une vue, en rendant les résultats dans un UIImage et en utilisant cela dans drawRect. Ou dans drawRect dessiner le texte de la chaîne directement sur le dégradé. –

0

Je pense qu'il est préférable que vous réutiliser l'instance UIImage pour toutes vos cellules, de cette façon, vous pouvez le conserver et assurez-vous qu'il ne soit pas libéré dans le cas d'une mémoire warning, une garantie que vous n'avez pas pour le cache de [UIImage imageNamed:]. En outre, une astuce pour le garder lisse est de s'assurer que vous n'avez pas de vues qui se chevauchent, en particulier celles qui sont transparentes.

0
  1. Si vous utilisez la même image sur toutes les cellules de votre table, alors il est bon d'obtenir l'image du cache d'image du système en + (UIImage) imageNamed: (NSString *) API inName. Essayez d'obtenir chacun de votre cellule en utilisant l'API dequeueReusableCell de UITableViewCell. Si cela retourne zéro alors créez seulement un nouvel objet de cellule. Si la couleur de votre vue de table est transparente (UIClearColor), définissez la propriété opaque de la vue de table sur NO.