Я использую базу данных sqlite для хранения созданного пользователем содержимого приложения. Поскольку у пользователя есть возможность добавлять и редактировать неограниченное количество различных объектов, таких как тестовые поля или представления изображений, я использую сериализованный JSON для хранения в виде строки в базе данных sqlite.
Мой V C выглядит иерархически немного упрощается так:
ViewController
|- ScrollView
|- UIView 1 - representing one content item
|- TextField - content element 1
|- TextField - content element 2
|- TextField ...
|- ImageView ...
|- ImageView ...
|- potential other views
|- ...
|- UIView 2 ...
Теперь вопрос в том, какой шаблон наиболее эффективен для отслеживания и обновления изменений этих объектов (в отношении памяти и скорости). Я придумал 2 возможных шаблона:
Каждый TextField
, ImageView
и т. c. созданный внутри одного из элементов контента UIView является подклассом Speci c, который получает десериализованный элемент контента JSON, содержащий все элементы контента как свойство. В соответствующей функции редактирования он обновляет десериализованный объект JSON, снова сериализует его и обновляет запись базы данных. Проблема в том, что все остальные объекты элемента содержимого также должны получить обновленную десериализованную JSON, и для отправки обновленного объекта потребуется нечто вроде сообщения NotificationCenter
. Также с большим количеством объектов все они будут содержать в памяти весь десериализованный объект JSON.
Каждый TextField
, ImageView
и c. просто содержит ссылку на идентификатор элемента контента, и при обновлении элемента элемент контента получит элемент контента с соответствующим идентификатором из базы данных sqlite, десериализует его, обновит его, снова сериализует и обновит запись базы данных. Потенциальная проблема: может ли весь процесс каждого select query -> deserialize -> update object -> serialize -> update query
занимать слишком много времени (например, отставание для пользовательского интерфейса)?
Возможно, есть лучший шаблон для этого?