ios - Swift 性能问题:从内存中的数据库加载反序列化对象或在更新 db 条目时执行序列化/反序列化
问题描述
我正在使用 sqlite 数据库来存储用户创建的应用程序内容。由于用户可以选择添加和编辑不限数量的不同对象,例如 testfields 或 imageviews,我使用序列化 JSON 作为字符串存储在 sqlite 数据库中。
我的 VC 层次结构看起来有点像这样简化:
ViewController
|- ScrollView
|- UIView 1 - representing one content item
|- TextField - content element 1
|- TextField - content element 2
|- TextField ...
|- ImageView ...
|- ImageView ...
|- potential other views
|- ...
|- UIView 2 ...
现在的问题是,跟踪和更新这些对象的变化(内存和速度方面)的最佳性能模式是什么。我想出了两种可能的模式:
在其中一个内容项 UIView 中创建的Every
TextField
等ImageView
是一个特定的子类,它获取将所有内容元素作为属性保存的反序列化 JSON 内容项。在相应的编辑功能上,它会更新反序列化的 JSON 对象,再次对其进行序列化并更新数据库条目。问题是:所有其他内容元素对象也需要获取更新的反序列化 JSON,并且NotificationCenter
需要类似消息的东西来发送更新的对象。此外,对于很多对象,它们都会将整个反序列化的 JSON 对象保存在内存中。Every
TextField
等ImageView
仅包含对内容项 ID 的引用,并且在元素更新时,内容元素将从 sqlite db 获取具有相应 ID 的内容项,对其进行反序列化、更新、再次序列化并更新数据库条目。潜在问题:每个过程的整个过程select query -> deserialize -> update object -> serialize -> update query
可能会花费太长时间(例如 UI 滞后)?
有没有更好的模式呢?
解决方案
推荐阅读
- angular - 当我重新加载/导航网页时,来自 API 的数据不会刷新
- javascript - 如何根据媒体查询更改 Javascript 变量?
- python - 列表追加在python中跳过一行
- java - Java: InetAddress.getLocalHost(); 抛出 java.net.UnknownHostException
- python - 为唯一列值编译数据框信息
- javascript - React-JS- 获取数组索引
- vue.js - Nuxt 在部署到 Netlify 时以 1% 而不是 100% 编译 CSS 不透明度
- python - 从 Python 查询 postgresql 服务器
- c# - 打开 Lucene.NET 索引以显示文档列表
- c++ - 基于范围的 for 未优化