【问题标题】:iOS: Should I use Core Data or NSUserDefaults?iOS:我应该使用 Core Data 还是 NSUserDefaults?
【发布时间】:2016-01-02 06:47:32
【问题描述】:

背景:

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

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

问题:

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

【问题讨论】:

  • 在我看来,只要在不使用的时候清除nsuserdefaults键,存储25个值的数组不会影响任何性能!!!
  • 当我不使用它时清除 NSUserDefaults 键是什么意思?一旦填充了该数据,我将需要将其永久保留在该密钥中
  • 数据不太可能改变?我不建议在此列表中使用 NSUserDefaults,因为那不是它的用途。你说得对,CoreData 在 25 岁时会过大。我建议将 NSArray 存储在 NSFileManager 中,或者如果它总是相同...创建一个带有硬编码信息的 plist,尽管这意味着它不能在没有当然更新
  • @JimTierney 我打算每个月更新餐厅的数组,所以你会推荐使用 NSFileManager 还是 NSUserDefaults?
  • 我建议将 NSArray 保存到 NSFileManager 位置,您只需每月用新数据覆盖此文件即可。 NSUserDefaults 用于存储设置和用户值等,而不是用于存储数据。使用 NSFileManager 是一种基本方法,但适用于您所描述的内容。我还建议您阅读有关存储数据的内容。 CoreData 不仅仅用于存储,这只是它功能的一小部分,尽管值得研究​​。用于数据库的 SQLite 也不错。 NSFileManager 只是一种在本地保存信息的快捷方式

标签: ios objective-c core-data nsuserdefaults


【解决方案1】:

视情况而定

  • 尺寸
  • 数据结构
  • 要求数据的完整性

我肯定会存储在 NSUserDefaults 中的 10 或 20 个“restaruants”数组。但只有当我确信这永远不会变得更复杂时。因为当您稍后扩展您的模型但从 NSUserData 开始时,您可能会保留NSUserDefaults,因为您避免在升级已安装应用程序期间将其迁移到 Core Data。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-24
        • 2011-06-25
        • 2014-11-04
        • 2011-10-04
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多