Ios 存储大型阵列时使用NSUserDefaults还是其他方法?

Ios 存储大型阵列时使用NSUserDefaults还是其他方法?,ios,objective-c,core-data,nsuserdefaults,magicalrecord,Ios,Objective C,Core Data,Nsuserdefaults,Magicalrecord,我有一个将JSON读入内存对象的应用程序。我有一个表示用户的对象,然后是一个自定义对象数组。此阵列通常为20-50个对象,但在极少数情况下最多可达7-800个 我读过一些关于这方面的文章,但发现很难选择,因为我只想在本地缓存这些内容,不需要更多,这样我就可以从服务器获取更少的内容 我可以看到三种解决方案: NSSERDEFAULTS。不确定大型阵列如何影响应用程序性能 CoreData/MagicalRecord。看起来不错,但有点复杂 Plist与NSCoding/Decoding 自定义解决

我有一个将JSON读入内存对象的应用程序。我有一个表示用户的对象,然后是一个自定义对象数组。此阵列通常为20-50个对象,但在极少数情况下最多可达7-800个

我读过一些关于这方面的文章,但发现很难选择,因为我只想在本地缓存这些内容,不需要更多,这样我就可以从服务器获取更少的内容

我可以看到三种解决方案:

  • NSSERDEFAULTS。不确定大型阵列如何影响应用程序性能

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

  • Plist与NSCoding/Decoding

  • 自定义解决方案

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

    非常感谢你的指点


    编辑:添加了plist/NSCoding选项,已经忘记了。

    您可以编写一个小的.sqlite数据库,这是永久性的,仍然很简单

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

    您还可以将其保存在.plist文件(或任何类型的文件)中。我认为这是目前最快最简单的解决方案。但在我看来,这不是最干净的


    我强烈建议您不要使用NSUserDefaults,因为它们不是用于此目的的。

    绝对同意@Zil-go for CoreData。很有可能,你会在某个阶段使用它,所以它不会是一个浪费的学习曲线

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


    这是让我开始学习的教程

    你好,我的朋友,你有一个好问题让我们了解使用它更好:

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

    • Plist—不需要复杂查询的少量数据,不需要编辑大量字段也适合存储,问题是Plist中序列化的数组和字典是递归传递的,也就是说,每个体量上的封闭体或其他容器中的字典只多出一层。从这里开始,对内容的限制如下:仅限于向序列化屈服的类型

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

    • MagicalRecord-用于简化核心数据工作的库,它的优点(清理我的核心数据相关代码,允许清晰、简单的单行抓取,在需要请求优化时仍然允许修改NSFetchRequest)如果您不了解Coredata的工作原理,我不建议使用

    结果:如果事实上您需要存储一些关键值,并且您不想为核心数据的知识而烦恼,而且您没有时间学习,请使用plist存储您的数据。如果您想存储更难、更大容量的coredata。我个人建议使用coredata,您确信它简单方便,只需花费时间


    祝你好运,做出一个正确的选择,我不明白为什么有人会否决你的问题,这个问题真的很好,它是一个具体的答案,+1来自我

    然后从
    NSUserDefaults
    处倾斜;它不是用来存储数据的,尽管你会发现很多人用它来存储数据,并在他们的应用程序中传递数据。然而,他们做错了。Sqlite。5.另存为文件。我希望您尝试所有这些方法,并对它们进行测试,以了解每个案例的工作原理。@JasonNam很难判断您是否认真。您可以使用RealM(),它非常容易实现,并且可以很好地解决您的案例:)好的,NSUserdefaults离开表格:)我想我会选择MagicalRecord。