Я новичок в программировании iOS и изо всех сил пытаюсь решить, как лучше всего кодировать объекты с интенсивным использованием памяти с использованием протокола NSCoding.
У меня есть большое количество объектов Item. С каждым элементом связано множество изображений высокого разрешения. Кроме того, каждый элемент принадлежит к категории элементов, которая может содержать 100 элементов.
Насколько я могу судить, у меня есть несколько разных вариантов кодирования:
- Кодировать весь объект ItemCategory
- Удалите класс ItemCategory, создайте только свойство itemCategory для каждого объекта Item и просто закодируйте отдельные объекты Item.
Мне кажется, что №1 будет расточительно дорого. Чтобы добавить новый элемент в ItemCategory, мне придется декодировать всю ItemCategory (что означает декодирование тех сотен изображений, связанных с содержащимися в нем элементами), добавить элемент, а затем перекодировать все это. (опять же, вместе со всеми этими изображениями).
Но № 1 кажется правильным способом сделать это с точки зрения структуры кода. # 2 заставляет меня придумать менее интуитивный способ хранения элементов и связывания их с соответствующими категориями элементов.
Если бы я пошел с # 1, есть ли способ декодировать только определенные части объектов, чтобы я не получал инициализацию всех этих изображений, когда мне на самом деле не нужно их отображать? Одна мысль, которая пришла мне в голову, заключается в том, чтобы на самом деле не кодировать UIImages Item вместе с самим Item, а просто имя изображения. Таким образом, образ будет инициализироваться только при необходимости, и его можно будет выпустить, не высвобождая весь элемент, если это необходимо. Я полагаю, что это своего рода подход к реляционной базе данных.
Я чувствую, что должен быть стандартный способ справиться с такой ситуацией, не так ли?
Или мой страх по поводу потребления памяти необоснован? Возможно, это можно рассматривать как пример «преждевременной оптимизации», но решение, которое я принимаю сейчас, сильно повлияет на структуру данных приложения. Переход с варианта № 1 на вариант № 2 в будущем был бы некрасивым :)