Swift - 使用UserDefaults保存大量字符串数组

3

我有一个社交应用,用户可以喜欢照片...所以,为了不等待服务器提取数据,我想将包含照片objectId的字符串数组存储到设备中。问题是,考虑到用户可能会喜欢成千上万张照片,使用UserDefaults是否是一种好的做法?


2
投票关闭此问题,因为这不是一个具体的问题,但简短的答案是:不。用户默认设置是存储偏好设置而不是数据的一种方式。使用文档目录中的JSON文件,使用Core Data,使用纯sqlite...但不要使用用户默认设置。 - Cyrille
不确定为什么这不是一个合适的问题,但感谢您的回答! - Sotiris Kaniras
如果你需要确认的话,我同意Cyrille的观点。在手机上存储数据可能有些棘手。在深入研究CoreData之前,我建议先花一些时间学习一些教程,但这是值得学习的!我没有太多涉及其他方法。 - Sethmr
太好了!非常感谢你们两个! - Sotiris Kaniras
1个回答

2
编辑 正如Eric Aya在评论中指出的那样,NSUserDefaults在应用程序启动时不会被自动加载到内存中。
如果您在NSUserDefaults中存储了大量数据,则加载NSUserDefaults所需的IO量将影响到您的数据。NSUserDefaults的预期使用情况是存储小型数据集,例如默认用户设置。
Plist可能是更好的解决方案(NSUserDefaults只是一个Plist,唯一的区别是应用程序启动时它会自动加载)。当您决定抓取Plist时,您仍然会遇到相同的加载时间问题,因为您需要将文件(Plist)加载到内存中。您可以通过进度条或活动指示器来处理这个问题,从而为用户提供更好的体验。CoreData是另一个选择(通常用于比字符串更复杂的数据结构,另一方面,如果数据的复杂性增加,它可以轻松地扩展您的存储需求),它涉及相当陡峭的学习曲线,但它是一个很棒的功能,并且由苹果公司进行了很好的文档记录:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/ 我还建议将数据存储在服务器上,在那里可以通过API公开它并使用Plist / CoreData /任何您喜欢的缓存响应。这样,如果您的用户更改设备,则仍然可以访问相同的数据,因为它是远程存储的。
祝你好运!

1
不对。NSUserDefaults实际上是存储在应用程序容器中的属性列表,只有在通过代码有意加载时才会加载其内容。除此之外,你的回答是正确的。 - Eric Aya
1
@EricAya 你说得对,不知为何我一直以为它会在应用启动时加载。我会更正我的答案,谢谢! - mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接