NSUserDefaults 或存储大型数组时的其他内容?
NSUserDefaults or something else when storing large arrays?
我有一个应用程序可以将 JSON 读取到内存中的对象中。我有一个代表用户的对象,然后是一组自定义对象。这个数组通常是 20-50 个对象,但在极少数情况下可以达到 7-800 个。
我已经阅读了一些关于此的线程,但发现很难选择,因为我只想在本地缓存它,仅此而已,这样我就可以从服务器获取更少的内容。
我可以看到三个解决方案:
NSUserDefaults。不确定大数组如何影响应用性能
CoreData/MagicalRecord。看起来不错但有点复杂
Plist 与 NSCoding/Decoding
自定义解决方案.
我倾向于 NSUserDefaults 或 Plist,因为它看起来最简单,而且我只想在应用 starts/exists 时读取内存和从内存中读取数据。但是,有什么我应该知道的问题吗,比如存储这么多对象时的 性能或应用程序启动时间 ?使用 MagicalRecord 还有其他原因吗?
不胜感激。
编辑:添加了plist/NSCoding选项,忘记了。
您可以编写一个小型 .sqlite 数据库,这是永久性的,而且仍然很容易。
Core-Data很强大,设置起来也不难,以后用得着。如果您知道以后可能需要它,不妨现在就做。这是我建议的最佳解决方案。 CoreData 不仅仅是数据持久化,不会浪费时间。
您也可以将其保存在 .plist 文件(或任何类型的文件)中。我认为这是目前对您来说最快、最简单的解决方案。不过在我看来不是最干净的。
虽然我强烈建议您不要使用 NSUserDefaults,但它们并非用于此目的。
完全同意@Zil - 选择 CoreData。很有可能,您会在某个阶段使用它,因此不会浪费学习曲线。
假设您可以使用唯一的键来识别 800 个自定义对象中的每一个,那么您只需要一个带有键和值的 table,就可以检索您的数据。根据这需要多长时间,您可能希望在后台队列中执行此操作,并在完成后更新 UI。
这是让我入门的教程 http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started
你好,我的朋友,你有一个很好的问题让我们了解它更好地使用:
NSUserDefaults - 通常用于例如定义一些设置,帐户,是否定义应用程序,一般是一个全局变量,便于存储和访问数据
plist - 不需要复杂查询的少量数据,编辑的字段不多也适合存储,问题是plist中序列化时的数组和字典被传递递归地,也就是说,每个地块或其他容器中的字典只多出一层封闭。从这里开始,对内容的限制也随之而来:只有屈服于序列化的类型。
Coredata/SQLite - 需要结构化查询的大量数据,我想,你必须首先问这个问题 "why I shouldn't use Coredata here"。稍微了解一下,您就会明白 Coredata 非常适合存储任何类型和数量的数据。
MagicalRecord - 用于简化核心数据工作的库及其优点(清理我的核心数据相关代码,允许清晰、简单、one-line 提取,仍然允许修改NSFetchRequest 当需要请求优化时)如果你不理解 Coredata 的工作原理,我不建议使用
RESULT : 如果你实际上需要存储一些键值并且你不想为核心数据的知识而烦恼并且你没有时间研究,请使用plist为您的数据。如果你想存储更困难和更大容量的东西——只有 coredata。个人推荐使用coredata,相信简单方便,只需要花点时间。
use plist info
祝你好运,做出正确的选择,我不明白为什么有人对你的问题投反对票,这个问题非常好,上面是具体的答案,我 +1...
我有一个应用程序可以将 JSON 读取到内存中的对象中。我有一个代表用户的对象,然后是一组自定义对象。这个数组通常是 20-50 个对象,但在极少数情况下可以达到 7-800 个。
我已经阅读了一些关于此的线程,但发现很难选择,因为我只想在本地缓存它,仅此而已,这样我就可以从服务器获取更少的内容。
我可以看到三个解决方案:
NSUserDefaults。不确定大数组如何影响应用性能
CoreData/MagicalRecord。看起来不错但有点复杂
Plist 与 NSCoding/Decoding
自定义解决方案.
我倾向于 NSUserDefaults 或 Plist,因为它看起来最简单,而且我只想在应用 starts/exists 时读取内存和从内存中读取数据。但是,有什么我应该知道的问题吗,比如存储这么多对象时的 性能或应用程序启动时间 ?使用 MagicalRecord 还有其他原因吗?
不胜感激。
编辑:添加了plist/NSCoding选项,忘记了。
您可以编写一个小型 .sqlite 数据库,这是永久性的,而且仍然很容易。
Core-Data很强大,设置起来也不难,以后用得着。如果您知道以后可能需要它,不妨现在就做。这是我建议的最佳解决方案。 CoreData 不仅仅是数据持久化,不会浪费时间。
您也可以将其保存在 .plist 文件(或任何类型的文件)中。我认为这是目前对您来说最快、最简单的解决方案。不过在我看来不是最干净的。
虽然我强烈建议您不要使用 NSUserDefaults,但它们并非用于此目的。
完全同意@Zil - 选择 CoreData。很有可能,您会在某个阶段使用它,因此不会浪费学习曲线。
假设您可以使用唯一的键来识别 800 个自定义对象中的每一个,那么您只需要一个带有键和值的 table,就可以检索您的数据。根据这需要多长时间,您可能希望在后台队列中执行此操作,并在完成后更新 UI。
这是让我入门的教程 http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started
你好,我的朋友,你有一个很好的问题让我们了解它更好地使用:
NSUserDefaults - 通常用于例如定义一些设置,帐户,是否定义应用程序,一般是一个全局变量,便于存储和访问数据
plist - 不需要复杂查询的少量数据,编辑的字段不多也适合存储,问题是plist中序列化时的数组和字典被传递递归地,也就是说,每个地块或其他容器中的字典只多出一层封闭。从这里开始,对内容的限制也随之而来:只有屈服于序列化的类型。
Coredata/SQLite - 需要结构化查询的大量数据,我想,你必须首先问这个问题 "why I shouldn't use Coredata here"。稍微了解一下,您就会明白 Coredata 非常适合存储任何类型和数量的数据。
MagicalRecord - 用于简化核心数据工作的库及其优点(清理我的核心数据相关代码,允许清晰、简单、one-line 提取,仍然允许修改NSFetchRequest 当需要请求优化时)如果你不理解 Coredata 的工作原理,我不建议使用
RESULT : 如果你实际上需要存储一些键值并且你不想为核心数据的知识而烦恼并且你没有时间研究,请使用plist为您的数据。如果你想存储更困难和更大容量的东西——只有 coredata。个人推荐使用coredata,相信简单方便,只需要花点时间。
use plist info
祝你好运,做出正确的选择,我不明白为什么有人对你的问题投反对票,这个问题非常好,上面是具体的答案,我 +1...