【问题标题】:Use NSArrays/NSMutableArrays and save in coreData or CorData only?使用 NSArrays/NSMutableArrays 并仅保存在 coreData 或 CorData 中?
【发布时间】:2013-11-04 10:48:58
【问题描述】:

我正在学习 CoreData。我有一个简单的程序,可以将文件加载到NSMutableArray,在NSMutableArray 中插入项目,显示数据,然后在我们关闭应用程序时保存到文件。 我想更改我的应用程序以使用 coreData。 我认为有两种方法可以做到这一点:

  1. 继续使用NSMutableArray 并使用CoreData 加载和保存项目。
  2. 忘记NSArray,只使用CoreData

最好的方法是什么?只有coreData还是使用NSArrays然后保存到CoreData?这个应用程序的最佳做法是什么,尤其是未来的应用程序?

感谢您的帮助。

【问题讨论】:

  • 你不能真正“只使用 CoreData”。 Core Data 是一个用于在 iOS 中持久化数据的框架。如果您想显示该数据,您仍然需要将其从 Core Data 中提取出来,并将其放入可以像 NSArray 一样显示的东西中。您可能会更好地查看 raywenderlich.com/934/… 之类的内容,这是对 Core Data 的出色介绍,并且会回答这个问题。
  • 我认为核心数据有很多开销 - NSArray 是基于 ram 的,但 cd 通常是基于磁盘的,所以你会失去 cd 的速度。然而,它在收集和组织数据时更加灵活。我认为将数组存储在 plist 中只能达到一定的内存大小(...?),所以你可能没有太多选择。但是您可以序列化数组并使用标准的 NSFileManager 东西将原始数据保存到磁盘。就我个人而言,我会使用 cd 来记录哪怕是微不足道的 10 条记录,而且我认为绝对是未来的证明。
  • @Todd - 一般来说,没有什么是未来的证明;也没有什么更必然“更多”的未来证明。这完全取决于您的问题、您的限制、发生了什么变化等。
  • 示例:如果您有大量记录,并且您只想更改其中大部分的 bool 标志,仅此而已。在这种情况下,可以发现 Core Data 需要,因为它必须将所有内容加载到内存中才能在再次分页之前更改那个标志。与 SQLite 相比,它可以按原样翻转“磁盘上”标志。我看过一个案例研究,有人因为这个示例案例而放弃了 SQLite 的 Core Data(他们的应用程序在 CD 中的性能很糟糕)。
  • 另外,“CD 通常是基于磁盘的”——这到底是什么意思? CD 通常用于将数据持久保存到磁盘。但要对数据进行任何操作,必须将其分页到 RAM 中。

标签: ios objective-c core-data


【解决方案1】:

您只能使用 Core Data 将数据保存到磁盘。但是,您将放弃很多便利,例如NSFetchedResultsController

特别是当您有大量数据时,内存中的对象的完整数组可能很快就会让设备无法处理。 Core Data 包含一组经过测试的成熟技术,可帮助您保持对象图的完整性、管理内存和性能,而您只需付出最少的努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多