在所有地方搜索之后,我发现SQLite,Realm,CoreData,UserDefaults和JSON文件之间没有适当的比较。
您可以轻松找到优点和缺点,但是很难知道该使用什么。
我知道决定完全取决于要求。但是仍然必须有一种决策的方式。
假设以下情况,哪种选项最适合个人,为什么?
注意:我不是在这里谈论存储敏感信息。
随时添加/更新更多相关案例。
答案 0 :(得分:2)
数据存储实现的大部分只是SQLite包装器。最常见的iOS实现是SQLite,ORM,CoreData,Realm,Keychain。
实现的另一部分只是一个简单的文本。例如,UserDefaults只是一个XML文件,您可以使用简单的iOS API进行编辑。但是,当您处理数十个元素时,出于性能方面的考虑,SQLite包装器会更加有用。
那么,SQLite包装器呢?
摘要如何?
我们测试中的SQLite(包装器,纯C语言)和Realm具有几乎相同的性能。 CoreData不够好。
SQLite包装器和Realm具有足够好的API。
唯一的SQLite包装器实际上是线程安全的。
答案 1 :(得分:1)
可用选项在iOS中保存数据。
用户默认设置: Quicky会保留少量数据。
可编码(NSCoder):用于保存自定义对象。
钥匙串:安全地存储少量数据。
SQLite:保留大数据,但需要查询操作。
核心数据:面向对象的数据库。
领域:更快,更轻松的数据库解决方案。
CoreData,Sqlite和Realm在商店中存储纯文本,如果您不告诉它进行加密,则可以全部使用加密来确保其安全性。
保存用户观看的历史记录[大量数据,仅允许插入和删除操作] 应该使用Coredata&Realm。
保存联系电话[最多1000个电话号码,需要快速获取,并且可以连续运行] 应该使用Coredata&Realm。
保存简单的GET API请求[用于缓存] 应该使用可编码,Coredata和Realm。该响应可用于 离线存储。
答案 2 :(得分:-2)
数据存储和缓存非常重要的主题。选择存储数据的方式可能取决于整个应用程序的设计。
NSURLCache::用于配置所需大小的缓存的简单选项。适用于缓存不需要任何后处理(JSON,图像请求)的数据。
let URLCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
NSURLCache.setSharedURLCache(URLCache)
文件缓存::如果您需要以某种方式发布流程数据(例如图像上的圆角,可以通过JSON构建自己的数据结构),则可以选择文件缓存。图像可以另存为普通文件,对于数据对象,可以使用NSCoding
协议。
数据库:对于完全工作的脱机模式,最好使用数据库。
NSUserDefaults :少量数据。不安全,没有同步。
SQLite:高效内存和跨平台。通常不是最佳选择。当您想在应用程序中共享现有的跨平台数据库时很有用。
核心数据:当您需要复杂的查询和对象之间的复杂关系时,这是一个不错的选择。具有基本的迁移支持和可视代码编辑器(带有代码生成器)。除非您需要,否则它可能应该是默认选项:同步或跨平台。
YapDatabase :比CoreData快。同步iCloud。
领域:比CoreData更快。线程安全。有很多选择,其中一些是付费的(例如Sync)
Firebase:云平台。具有离线模式,但已付费。
CouchBase:免费同步。不需要作为非常灵活的架构进行迁移。
简单记录: UserDefaults , NSCoding
本地数据存储,复杂的记录: CoreData (是,领域)
同步: CouchDB , Yap (iCloud), CoreData (iCloud-),领域(付费), Firebase (付费)
速度:是,领域
基于Patform或基于云的: Firebase ,解析
跨平台:领域, CouchDB , MongoDB , Firebase