iOS: лучший способ кодировать/декодировать интенсивные объекты памяти

StackOverflow https://stackoverflow.com/questions/8343103

Вопрос

Я довольно новичок в программировании iOS и изо всех сил пытаюсь определить, какой лучший способ кодировать интенсивные объекты памяти, используя протокол NSCODING.

У меня большое количество предметов. Каждый элемент имеет многочисленные изображения в высоком разрешении, связанные с ним. Кроме того, каждый элемент принадлежит элементу, которая может содержать 100 элементов.

Насколько я могу судить, у меня есть пара разных вариантов кодирования:

  1. Кодировать весь объект ItemCategory
  2. Устраните класс ItemCategory, создайте только свойство ItemCategory для каждого элемента и просто кодируйте отдельные объекты элемента.

Мне кажется, что № 1 будет расточительно дорогой. Чтобы добавить новый элемент в Itemcategory, мне придется расшифровать всю Itemcategory (что означает декодирование этих сотен изображений, привязанных к элементам, которые он содержит), добавьте элемент, а затем повторно кодируйте все это (Опять же, вместе со всеми этими изображениями).

Но #1 кажется правильным способом сделать это с точки зрения структуры кода. #2 заставляет меня придумать менее интуитивно понятный способ хранения предметов и ассоциации их с их соответствующими элементами.

Если бы я пошел с #1, есть ли способ декодировать только определенные части объектов, чтобы я не получал все эти изображения, которые инициализировались, когда мне на самом деле не нужно их отображать? Одна мысль, которая пришла мне в голову, состоит в том, чтобы на самом деле не кодировать UIImages элемента вместе с самим элементом, а просто имя изображения. Таким образом, изображение будет инициализироваться только при необходимости, и может быть выпущено без выпуска всего элемента, если это так. Я полагаю, что это своего рода подход типа реляционной базы данных.

Я чувствую, что должен быть стандартный способ справиться с такой ситуацией, нет?

Или мой страх перед потреблением памяти необоснован? Возможно, это можно рассматривать как пример «преждевременной оптимизации», но решение, которое я принимаю сейчас, будет глубоко повлиять на структуру данных приложения. Смену с варианта № 1 на #2 вниз по дороге не было бы красивым :)

Это было полезно?

Решение

Возможно, вы можете использовать Coredata и Persistentstore. Coredata позволяет легко управлять отношениями. Вы можете создавать сущности, которые имеют отношения, которые управляются системой. Таким образом, в вашем случае, возможно, у вас могут быть 3 сущности: категория, элемент и изображения, а также одно и многие отношения между категорией и элементами, а также от одной и многих отношений между элементом и изображениями, что означает, что каждая категория может иметь несколько элементов и каждый элемент имеет несколько изображений, затем, когда вам нужно, вы можете создавать новые изображения и добавить их в конкретный элемент или искать все изображения в элементе.

Я надеюсь, что это было ясно, но Coredata отлично подходит для управления отношениями, и с моделью данных очень легко работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top