Вопрос о быстродействии: загрузка десериализованных объектов из базы данных в память или выполнение сериализации / десериализации при обновлении записи в БД - PullRequest
1 голос
/ 24 января 2020

Я использую базу данных 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 возможных шаблона:

  1. Каждый TextField, ImageView и т. c. созданный внутри одного из элементов контента UIView является подклассом Speci c, который получает десериализованный элемент контента JSON, содержащий все элементы контента как свойство. В соответствующей функции редактирования он обновляет десериализованный объект JSON, снова сериализует его и обновляет запись базы данных. Проблема в том, что все остальные объекты элемента содержимого также должны получить обновленную десериализованную JSON, и для отправки обновленного объекта потребуется нечто вроде сообщения NotificationCenter. Также с большим количеством объектов все они будут содержать в памяти весь десериализованный объект JSON.

  2. Каждый TextField, ImageView и c. просто содержит ссылку на идентификатор элемента контента, и при обновлении элемента элемент контента получит элемент контента с соответствующим идентификатором из базы данных sqlite, десериализует его, обновит его, снова сериализует и обновит запись базы данных. Потенциальная проблема: может ли весь процесс каждого select query -> deserialize -> update object -> serialize -> update query занимать слишком много времени (например, отставание для пользовательского интерфейса)?

Возможно, есть лучший шаблон для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...