2016-11-16 49 views
1

我有一个社交应用程序,用户可以在其中照片...所以,为了不等待从服务器获取数据,我想存储到设备,包含照片'objectIds'的字符串数组。问题是,考虑到用户可以像数千张照片一样,使用UserDefaults来实现这一点很好吗?Swift - 用UserDefaults保存大量字符串

+1

投票结束,因为这不是一个具体的问题,但简短的回答:不。用户默认值是存储首选项的一种方式,而不是数据。在Documents目录中使用JSON文件,使用Core Data,使用普通的sqlite ...但不是User Defaults。 – Cyrille

+0

不知道为什么它不是一个正确的问题,但谢谢你的答案! –

+0

我同意西里尔如果你需要任何确认。在手机上存储数据可能有点棘手。在深入研究CoreData之前,我会花一些时间研究一些教程,但是值得学习!我没有太多与其他方法混淆。 – Sethmr

回答

1

编辑 正如Eric Aya在评论中指出的,当应用程序启动时,NSUserDefaults不会自动加载到内存中。

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加载到内存中。 NSUserDefaults实际上是存储在应用程序容器中的plist,并且只有通过代码有意地执行内容时才会加载内容。除此之外,你的回答是正确的。 – Moritz

+1

@EricAya你是对的,出于某种原因,我一直在我的脑海中停留在应用程序启动时。我会纠正我的答案,欢呼! – mike