Frage

Ich bin ziemlich neu in der iOS -Programmierung und kämpfe darum, zu entscheiden, wie der beste Weg ist, Speicherintensivobjekte mithilfe des NSCoding -Protokolls zu codieren.

Ich habe eine große Anzahl von Artikelobjekten. Jeder Artikel verfügt über zahlreiche Hi-RES-Bilder, die ihm zugeordnet sind. Zusätzlich gehört jedes Element zu einer Artikelkategorie, die möglicherweise 100 Elemente enthalten kann.

Soweit ich das beurteilen kann, habe ich ein paar verschiedene Codierungsoptionen:

  1. Codieren das gesamte Elementcategory -Objekt
  2. Beseitigen Sie die ElementCategory -Klasse, erstellen Sie nur eine Elementcategory -Eigenschaft für jedes Element und codieren Sie einfach die einzelnen Elementobjekte.

Es scheint mir, dass #1 verschwenderisch teuer wäre. Um der ItemCategory ein neues Element hinzuzufügen, müsste ich die gesamte Elementkategorie dekodieren (was bedeutet, dass die Hunderte von Bildern, die mit den Elementen gebunden sind, auch entschlüsselt), das Element hinzufügen und dann das Ganze neu eingeben (Wieder zusammen mit all diesen Bildern).

Aber #1 scheint die richtige Art zu sein, dies aus einer Sicht der Code-Struktur zu tun. #2 zwingt mich dazu, eine weniger intuitive Möglichkeit zu finden, Gegenstände zu speichern und sie mit ihren jeweiligen Gegenständen zu verbinden.

Wenn ich mit #1 gehen würde, gibt es eine Möglichkeit, nur bestimmte Teile von Objekten zu dekodieren, damit nicht all diese Bilder initialisiert werden, wenn ich sie nicht wirklich anzeigen muss? Ein Gedanke, der mir auftrat, ist, die Benutzeroberfläche des Elements nicht zusammen mit dem Element selbst zu kodieren, sondern nur den Bildnamen. Auf diese Weise wird das Bild nur bei Bedarf initialisiert und kann freigegeben werden, ohne den gesamten Element zu veröffentlichen, wenn dies gewünscht wird. Ich nehme an, dies ist eine Art relationaler Datenbanktyp von Ansatz.

Ich habe das Gefühl, dass es eine Standardmethode geben muss, um mit einer solchen Situation umzugehen, nein?

Oder ist meine Angst vor dem Gedächtniskonsum unbegründet? Vielleicht könnte dies als Beispiel für "vorzeitige Optimierung" angesehen werden, aber die Entscheidung, die ich jetzt treffe, wirkt sich jedoch tief auf die Datenstruktur der Anwendung aus. Wechsel von Option Nr. 1 zu #2 in der Straße wäre nicht schön :)

War es hilfreich?

Lösung

Vielleicht können Sie Coredata und einen persistenten Store verwenden. Coredata macht es einfach, Beziehungen zu verwalten. Sie können Entitäten erstellen, die Beziehungen haben, die vom System verwaltet werden. In Ihrem Fall können Sie also möglicherweise eine 3 Entitäten haben: Kategorie, Element und Bilder und eine zu vielen Beziehung zwischen Kategorie und Elementen sowie eine eine zu vielen Beziehung zwischen Elementen und Bildern, was bedeutet, dass jede Kategorie mehrere Elemente haben kann und jedes Element hat mehrere Bilder. Wenn Sie Sie benötigen, können Sie neue Bilder erstellen und zu einem bestimmten Element hinzufügen oder nach allen Bildern in einem Element suchen.

Ich hoffe, dass dies klar war, aber Coredata eignet sich hervorragend zum Verwalten von Beziehungen und das Datenmodell ist sehr einfach zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top