Question

Je suis assez nouveau à la programmation iOS et je suis mal à décider quelle est la meilleure façon de coder la mémoire des objets intensifs en utilisant le protocole NSCoding.

J'ai un grand nombre d'objets d'article. Chaque élément a de nombreuses images haute résolution qui y sont associés. De plus, chaque article appartient à un ItemCategory, qui peut contenir 100 objets.

Pour autant que je peux dire, j'ai deux ou trois différentes options d'encodage:

  1. Encode l'ensemble de l'objet ItemCategory
  2. Éliminez la classe ItemCategory, créez simplement une propriété itemCategory pour chaque article, et juste encode les objets individuels d'article.

Il me semble que # 1 serait gaspillée cher. Pour ajouter un nouvel élément à la ItemCategory, je dois décoder l'ensemble ItemCategory (ce qui signifie décodage ces centaines d'images liées aux éléments qu'il contient aussi), ajouter l'article, puis réencoder la chose entière (encore une fois, avec toutes ces images).

Mais, # 1 ne semble pas être la bonne façon de le faire d'un point de vue structure du code. # 2 forces me viennent avec une manière moins intuitive pour stocker les objets et les associer à leurs ItemCategories respectifs.

Si je devais aller avec # 1, est-il possible de ne décoder que certaines parties d'objets, de sorte que je ne finisse pas avec toutes ces images s'initialisés quand je ne suis pas vraiment besoin de les afficher? Une pensée qui me vint est de ne pas coder en fait les UIImages de l'article ainsi que le point lui-même, mais seulement le nom de l'image. De cette façon, l'image ne serait initialisées si nécessaire, et pourrait être libéré sans relâcher l'élément entier si on le souhaite. Je suppose que ce genre est d'un type d'approche de base de données relationnelle.

Je me sens comme il doit y avoir un moyen standard pour gérer une situation comme ça, non?

Ou est ma peur sur la consommation de mémoire non fondées? Peut-être que cela pourrait être considéré comme un exemple de « l'optimisation prématurée », mais la décision que je fais maintenant affecter profondément la structure de données de l'application. Changement de l'option n ° 1 à n ° 2 sur la route wouldnt être assez:)

Était-ce utile?

La solution

Peut-être que vous pouvez utiliser CoreData, et un PersistentStore. CoreData permet de gérer facilement les relations. Vous pouvez créer des entités qui ont des relations qui sont gérées par le système. Donc, dans votre cas, vous pouvez peut-être un 3 entités: Catégorie, article et Images, et un à plusieurs entre catégorie et articles, et un à plusieurs entre l'article et des images, ce qui signifie que chaque catégorie peut avoir plusieurs éléments et chaque élément a plusieurs images, puis lorsque vous avez besoin yo, vous pouvez créer de nouvelles images et de les ajouter à un élément particulier, ou rechercher toutes les images dans un élément.

J'espère que cela était clair, mais CoreData est idéal pour la gestion des relations et le modèle de données est très facile de travailler avec.

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