我有一个将JSON读入内存中对象的应用程序。我有一个对象代表用户,然后是一个自定义对象数组。这个数组通常是20-50个对象,但在极少数情况下可以达到7-800个。
我已经阅读了一些有关此问题的线索,但发现很难选择,因为我想做的就是在本地缓存,仅此而已,这样我就可以从服务器中获取更少的内容。
我可以看到三种解决方案:
NSUserDefaults的即可。不确定应用程序性能如何受到大型数组的影响
CoreData / MagicalRecord 。看起来不错但有点复杂
使用NSCoding /解码的Plist
自定义解决方案。
我倾向于NSUserDefaults或Plist,因为它看起来最简单,我只想在应用程序启动/存在时读取内存和内存。但是,在存储这么多对象时,我应该知道有什么问题,例如性能或应用启动时间吗?使用MagicalRecord还有其他原因吗?
指针非常感谢。
编辑:添加了plist / NSCoding选项,已经忘记了。
答案 0 :(得分:4)
美好的一天,我的朋友,你有一个很好的问题让我们明白最好使用:
NSUserDefaults - 通常用于定义某些设置,帐户,是否定义应用程序,通常是一个易于存储和访问数据的全局变量
Plist - 少量不需要复杂查询的数据,编辑不是很多字段也适合存储,问题是plist中序列化的数组和字典是递归传递的,即,每个地块或其他容器中的字典只有一个外壳的一个级别。从这里开始,内容也受到限制:仅限于序列化的类型。
Coredata / SQLite - 需要结构化查询的大量数据,我想,首先你必须问“为什么我不应该在这里使用Coredata”。稍微了解一下,您就会明白Coredata非常适合存储任何类型和数量的数据。
MagicalRecord - 用于简化核心数据工作的库,其优点(清理我的核心数据相关代码,允许清晰,简单,单行提取,仍允许在请求优化时修改NSFetchRequest)如果您不理解Coredata的作用
结果:如果实际上您需要存储一些键值,并且您不想理解核心数据并且没有时间学习,请使用plist获取数据。如果你想存储更难和更多的东西 - 只有coredata。我个人建议使用coredata,你确信它简单方便,只需要花时间。
祝你好运,做出正确的选择,我不明白为什么有人会对你的问题投票,这个问题真的很好而且就是具体的答案,来自我的+1 ......
答案 1 :(得分:1)
你可以写一个小的.sqlite数据库,这是永久性的,但仍然很容易。
核心数据功能非常强大,设置起来并不困难,以后它会派上用场。如果你知道以后可能需要它,不妨现在就去做。这是我认为最好的解决方案。 CoreData不仅仅是数据持久性,也不会浪费时间。
您也可以将其保存在.plist文件中(或任何类型的文件)。我认为这是目前最快,最简单的解决方案。不过我认为不是最干净的。
我强烈建议你不要使用NSUserDefaults,但他们并不是故意的。
答案 2 :(得分:1)
绝对同意@Zil - 去核心数据。有可能,你将在某个阶段使用它,所以它不会浪费学习曲线。
假设您可以使用唯一键识别800个自定义对象中的每一个,那么您只需要一个包含键和值的表,您就可以检索数据。根据这需要多长时间,您可能希望在后台队列中执行此操作,并在完成后更新UI。
这是让我开始的教程http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started