我有一个社交应用,用户可以在那里看照片...所以,为了不等待从服务器获取数据,我想存储到设备,包含照片的字符串数组' objectIds ..问题是,考虑到用户可以喜欢数千张照片,使用UserDefaults实现这一目标是不错的做法?
答案 0 :(得分:1)
修改的 正如Eric Aya在评论中所指出的,当应用程序启动时,NSUserDefaults不会自动加载到内存中。
NSUserDefaults在您的应用程序启动时加载到内存中如果您在NSUserDefaults中存储了特别多的数据,那么您的应用程序启动以加载NSUserDefaults所需的时间将受到检索数据所需的IO数量的影响。 NSUserDefaults的预期用例是存储少量数据,例如默认用户设置。
Plist可能是更好的解决方案(NSUserDefaults只是一个Plist,不同之处在于它是在应用程序启动时自动加载的)。当您决定获取Plist时,您仍会遇到与加载时相同的问题,因为您将文件(Plist)加载到内存中。您将能够使用进度条或活动指示器来处理此问题,从而为用户提供更好的体验。 比不得不等待比平常更长时间才能打开应用。 CoreData是另一种选择(通常用于比字符串更复杂的数据结构,另一方面,它使您能够在数据复杂性增加的情况下非常轻松地扩展存储需求),并且涉及相当陡峭的学习曲线但它是一个很好的功能,并且有很好的记录,由Apple:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/
我还建议将数据存储在可以通过API公开的服务器上,并使用Plist / CoreData /随意缓存响应。这样,如果您的用户更改了设备,他们仍然可以访问与远程存储相同的数据。
祝你好运!