iOS: 我应该使用 Core Data 还是 NSUserDefaults?

iOS: Should I use Core Data or NSUserDefaults?

背景:

我有一个应用程序可以从数据库中检索餐厅列表,每个餐厅都有一个单独的基本信息数组(营业时间、名称、地址等)。我想在应用程序首次加载时从服务器检索该信息,但随后将其存储在应用程序本身中,使用 NSUserDefaults 或核心数据,因为信息不太可能改变。我要存储的最大餐厅数量约为 25 家,这是一个足够小的数据集合来使用 NSUserDefaults 吗?

我看过类似的问题,存储超过 1,000 条记录的数据,但我只存储了一个小数组。

问题:

NSUserDefaults 比 Core Data 更容易使用,所以如果可能我想避免使用 Core Data。就我而言,如果我将餐厅列表存储在 NSUserDefaults 而不是 Core Data 中,是否会出现性能问题?

取决于

  • 尺码
  • 数据结构
  • 数据完整性要求

只是一个 10 或 20 的数组 "restaruants" 我当然会存储在 NSUserDefaults 中。但只有当我确信这永远不会变得更复杂时。因为当您稍后扩展您的模型但开始使用 NSUserData 时,您可能会继续使用 NSUserDefaults 只是因为您避免在已安装的应用程序升级期间将其迁移到核心数据。

因此,对于包括引用在内的更复杂的结构,并且当您对您的应用程序有进一步的计划以实现可能需要更多实体的更多功能时,您应该从一开始就选择 Core Data。

顺便说一句,它并不像您想象的那么复杂。

但是,除了滥用 NSUserDefaults,您可以简单地将 NSArray 写入文件,使用 -writeToFile:atomically:-initWithContentsOfFile: 来读取它们。

NSUserDefaults 不适用于数据,它用于存储简单的键值对,如用户设置和标志。 Core Data 一开始有点难学,但绝对值得,即使对于简单的应用程序也是如此。

如果它确实是一个不会经常更改的小而简单的数据集,您还可以将一些数据存储在本地 plist 中(即保存 NSArrayNSDictionary 到 plist 使用writeToFile 方法)。就性能而言,这与使用 NSUserDefaults 没有太大区别,但我认为它更简洁且更易于管理。如果它永远不会改变,您还可以通过创建一个 plist 文件并用您的数据填充它来将 plist 与您的应用程序资源包含在 XCode 中。

考虑到数据量,用户默认或特定的plist/json文件都可以。 CoreData 绝对是矫枉过正。