到处搜索后,我发现 SQLite、Realm、CoreData、UserDefaults 和 JSON 文件之间没有更合适的比较。
您可以轻松找到优缺点,但很难知道该使用什么。
我知道这个决定完全取决于要求。但是仍然必须有一种方法来做出决定。
假设以下情况,哪些选项最适合个人,为什么?
- 保存用户观看历史[数据量大,只有插入、删除操作]
- 保存联系人号码[最多1000个号码,需要快速获取,并持续运行]
- 保存简单的 GET API 请求 [用于缓存]
注意:我在这里不是在谈论存储敏感信息。
欢迎随时添加/更新更多相关案例。
最佳答案
数据存储实现的大部分只是 SQLite 包装器。最常见的 iOS 实现是 SQLite、ORM、CoreData、Realm、Keychain。
实现的另一部分只是一个简单的文本。例如,UserDefaults 只是一个 XML 文件,您可以使用简单的 iOS API 对其进行编辑。但是,当您处理超过几十个元素时,出于性能原因,SQLite 包装器更有用。
那么,SQLite 包装器呢?
- 您可以使用 Keychain但它有几个缺点:这不是线程安全的,您只能在允许的应用程序时刻获取数据,有时它会为现有元素返回不正确的结果。这对密码很有用,仅此而已。
- CoreData有原生API,但有内存泄漏的缺点,API复杂,这不是线程安全的数据库,性能不好。
- SQLite .首先,您可以使用具有 11KB 依赖项的原生 C 库。缺点:旧式 C API、原始 SQL 查询。
- SQLite Swift wrapper .在这种情况下,您必须使用第三方库。但表现良好。
- SQLite ORM .这种方式允许在不知道谁实际映射到 SQLite 表的情况下使用你的对象。使用简单,性能不佳,依赖第三方。
- Realm .这确实表现出色且易于使用。但它在线程安全方面有一个缺点。 ORM 和 Realm 的区别在于 Realm 中的对象不是存储为一个明显的表,它有自己的魔力如何将数据转换为表表示。
- Firebase database .我没有在生产中使用这个库。它已将在线实现作为主要功能。我不确定使用主要内部数据库是否正确。
总结呢?
在我们的测试中,SQLite(Wrapper,纯 C)和 Realm 的性能几乎相同。 CoreData 不够好。
SQLite wrapper 和 Realm 有足够好的 API。
唯一的 SQLite 包装器是真正线程安全的。
关于ios - 如何决定使用什么 [Sqlite, Realm, CoreData, User-default, JSON file] 来存储 iOS 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57024491/