繁体   English   中英

NSArray或NSDictionary用于存储在UserDefaults中?

[英]NSArray or NSDictionary for storing in UserDefaults?

我有一个当前存储在NSArray中的用户类型“新闻”的集合。 我必须将它们存储在UserDefaults中才能将它们保存在设备上。 新闻具有唯一的属性ID。 在将它们存储到UserDefaults之前,我将NSArray转换为NSDictionary,其中的键是ID,此键的对象是News。 这是存储它们的好方法吗?

选择NSDictionary的原因是,每次我从Web服务重新下载新闻时,都能够检查新闻列表中是否存在具有特定ID的新闻。 这样,每个新闻ID只能有一个新闻实例。 我认为使用普通的NSArray很难管理-否则我会丢失某些东西?

我必须将它们存储在UserDefaults中才能将它们保存在设备上。

UserDefaults用于存储首选项,设置和其他“小”信息,而不用于存储应用程序数据。 您没有“拥有”使用NSUserDefaults的权利,您可以使用许多其他选项。 以原始格式(例如,使用NSKeyedArchiver / NSKeyedUnarchiver)写入文件(在文档目录中)。

您可以像这样获取文档目录路径

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

除了存储以新闻ID作为密钥的NSDictionary之外,还可以。 我真的没有看到拥有NSArray并将其“转换”为NSDictionary的意义,而是使用其中的一种(这样一来,您始终可以确保每个项目只有一个News)。

NSUserDefaults不是数据库,但是您已经知道它。

无论如何,我将直接存储数组,还将最后一次看到的新闻ID保存为单独的首选项 然后,您只需要处理ID大于上次看到的项目的新闻项目。 下载新闻项时,您需要同时更新新闻和上次看到的ID。 您需要确保ID升序。

根据您对新闻的特殊使用,一种不同的方法是保存两个数组,一个数组存储新闻项,另一个数组存储新闻ID列表。 使用第二个数组检查是否有新消息。

除非您要处理大量新闻项目(在这种情况下,无论如何都应使用Core Data),否则您正在优化不需要优化的内容。 读取,排序,更新和将小数组保存回NSUserDefaults的速度非常快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM