NSUserDefaults或其他东西存储大型数组?

我有一个将JSON读入内存对象的应用程序。 我有一个对象代表用户,然后是一个自定义对象的数组。 这个数组通常是20-50个对象,但在罕见的情况下可以达到7-800个。

我已经阅读了一些关于这个线程,但发现很难挑选,因为我想要做的就是caching这个本地,没有更多,所以我可以从服务器获取较less。

我可以看到三个解决scheme:

  1. NSUserDefaults 。 不确定应用性能如何受到大型arrays的影响

  2. CoreData / MagicalRecord 。 看起来不错,但有点复杂

  3. 与NSCoding /解码的Plist

  4. 定制解决scheme

我倾向于NSUserDefaults或Plist,因为它似乎是最简单的,我只想在应用程序启动/存在时读取和从内存中读取。 但是,是否有任何我应该知道的问题,比如在存储如此多的对象时的性能或应用程序启动时间 ? 有使用MagicalRecord的其他原因吗?

指针非常感谢。

编辑:添加了plist / NSCoding的select,忘记了。

祝你有个好日子,我的朋友,我有一个很好的问题,让我们明白,它是更好的使用:

  • NSUserDefaults – 通常用于定义某些设置,帐户,是否定义应用程序,通常是用于方便存储和访问数据的全局variables已打开

  • Plist – less量的数据不需要复杂的查询,不需要大量的字段编辑也适合存储,问题在于plist中的序列化数组和字典是recursion传递的,也就是说,只有一个级别每个地块或其他容器上的字典都会变成一个shell。 从这里也对内容进行限制:只有给予序列化的types。

  • Coredata / SQLite – 需要结构化查询的大量数据,我想,你首先要问“为什么我不应该在这里使用Coredata”这个问题。 稍微了解一下,您就会明白,Coredata非常适合存储任何types和数量的数据。

  • MagicalRecord – 用于简化核心数据工作的库,它的优点(清理我的核心数据相关代码,允许清晰,简单的单行提取,当需要请求优化时,仍然允许修改NSFetchRequest)推荐使用,如果你不明白的Coredata的作品

结果 :如果实际上你需要存储一些关键值,而且你不想打扰核心数据的知识,而且你没有时间学习,那么使用plist来处理你的数据。 如果你想存储更难和更多的数量 – 只有coredata。 我个人推荐使用coredata,你确信它很简单方便,只需花费时间。

使用plist信息

使用核心数据信息

祝你好运,做出正确的select,我不明白为什么有人投你的问题,这个问题真的很好,在这个问题上是具体的答案,从我+1。

你可以编写一个小型的.sqlite数据库,这是永久性的,仍然很容易。

核心数据非常强大,安装起来并不难,而且稍后会派上用场。 如果你知道你以后可能需要它,不妨现在就做。 这是我build议的最好的解决scheme。 CoreData不仅仅是数据持久性,而且不会浪费时间。

您也可以将其保存在.plist文件(或者任何types的文件)中。 我认为这是现在最快,最简单的解决scheme。 不是我认为最干净的。

我强烈build议你不要使用NSUserDefaults,但他们不是这个意思。

绝对赞同@Zil – 去CoreData。 机会是,你会在某个阶段使用它,所以它不会是一个浪费的学习曲线。

假设您可以使用唯一键标识800个自定义对象中的每一个,那么您只需要一个带有键和值的表,并且可以检索数据。 取决于需要多长时间,您可能希望在后台队列中执行此操作,并在完成后更新UI。

这里是让我开始的教程http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started