2011-08-23 4 views
0

Cette question est liée à la meilleure pratique lors de l'affichage d'une vue de table, donc s'il y a une meilleure façon de résoudre ce problème que ma solution proposée (dans la question), dites-moi.TableView utilisant deux tableaux simultanés comme source

J'ai une vue de table qui a un texte qui est contenu dans un NSArray de Dictionnaires comme source pour chaque texte de cellule. La vue table doit également afficher un UIImage dans la cellule du tableau. Chaque cellule aura un texte, mais certaines cellules ne contiendront pas UIImage.

Quelle est la meilleure approche à ce problème?

Actuellement, si un UIImage est disponible pour le texte, il est défini comme une clé dans le dictionnaire qui contient également le texte et affiché. En termes de gestion de la mémoire est-ce une mauvaise approche?

Alternativement, est-il sensé d'utiliser deux NSARrays qui se correspondent (par exemple, ils ont tous deux le même nombre d'éléments et l'objet à l'index 1 du premier tableau correspondrait à l'objet à l'index 1 du second array) et juste sauvegarder un NSNull ou quelque chose de similaire dans le second tableau (image) qui n'a pas toujours un objet qui doit être affiché?

C'est tout, merci pour toute contribution!

Répondre

1

L'une ou l'autre méthode fonctionne, bien que NSArray de NSDictionarys soit généralement un peu plus clair pour les autres personnes qui lisent votre code (ou pour vous-même des mois plus tard). Mieux encore, il pourrait s'agir d'un tableau d'objets de sous-classe NSObject personnalisés pour contenir explicitement le texte et l'image, bien que les économies de mémoire soient probablement mineures. En ce qui concerne le stockage des UIImages, les problèmes de mémoire sont les mêmes, qu'ils soient dans un dictionnaire ou dans un tableau séparé. Si vous les créez avec imageWithContentsOfFile: ou initWithContentsOfFile:, vous devriez être assez bon car UIImage devrait automatiquement libérer les données de l'image lorsque cela est nécessaire (et les données de l'image ne sont pas utilisées) et le recharger à partir du fichier quand il est à nouveau nécessaire. Si vous créez vos UIImages d'une autre manière et qu'ils sont volumineux ou particulièrement nombreux, vous pouvez vouloir enregistrer les données dans des fichiers de sorte que vous puissiez utiliser imageWithContentsOfFile:.

+0

Oui - le problème de mémoire est une préoccupation - ils ne sont pas sauvegardés localement lors de la première vue plutôt récupérés d'un serveur, puis sauvegardés localement. TableViewReusableCell va-t-il libérer automatiquement l'objet image lorsque la cellule est réutilisée? – Tyler

+0

@Tyler: Lorsque vous affectez une nouvelle image (ou 'nil' comme image), l'ancienne UIImage sera libérée (et libérée si rien d'autre ne la retient). De même, si un UIImage a été créé avec le contenu d'un fichier, lorsque l'application reçoit un avertissement de mémoire, l'objet UIImage peut libérer la mémoire utilisée pour contenir les données d'image; il sera ensuite recharger à partir du fichier la prochaine fois qu'il est nécessaire. S'il n'y a pas de fichier alors il ne peut pas le faire, bien sûr, et vous devez vous assurer de ne pas supprimer le fichier jusqu'à ce que l'UIImage qui l'utilise soit libéré. – Anomie

Questions connexes