应用程序会在应用程序启动时将用户默认存储的数据加载到内存中吗?
最近我发现,当我保存,例如,10MB的数据到用户默认设置并重新启动我的应用程序,该应用程序的内存根据Xcode的内存报告约10MB比之前推出大。应用程序会在应用程序启动时将用户默认存储的数据加载到内存中吗?
所以我不能用NSUserDefaults
保存大数据的良好表现?
而且数据是电子邮件,有文件夹(收件箱,垃圾桶等),这些消息的附件的概念需要保存到本地。我知道SQLite
,我用它来存储需要搜索的数据,但它有些复杂,我不知道CoreData
是否是一个不错的选择。
我计划将电子邮件存储到NSUserDefaults
,因为它很简单,我只是实施NSCoding
协议,但现在它似乎不是内存问题的好解决方案。
// Save
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mailFolders];
[userDefaults setObject:data forKey:@"myKey"];
[userDefaults synchronize];
// Read
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *mailData = [userDefaults objectForKey:@"myKey"];
NSArray *mailDataArray = [NSKeyedUnarchiver unarchiveObjectWithData:mailData];
NSLog(@"mail data size:%@", [NSByteCountFormatter stringFromByteCount:mailData.length countStyle:NSByteCountFormatterCountStyleFile]);
/**
mailFolder {
folderInfo,
messages
}
*/
NSUserDefaults
真的意味着存储的少量数据,如设置,偏好,以及个人价值观。
推荐使用核心数据或SQLite的存储元件的一个大的列表。
有大约源码与核心数据的一个很好的问题; Working with data in iOS Apps和Core Data vs SQLite 3堆栈溢出,你可能想读通过这个问题的答案。
我thnik没有大小限制在NSUserDefaults.It的所有在设备存储.. 存储,您可以检查此链接 https://discussions.apple.com/thread/1763096?start=0&tstart=0
财产清单应该用于那些主要由字符串和数字数据。与大块二进制数据一起使用时,它们效率非常低。
汤姆, 有iOS中许多的方式来存储数据。
1- NSUserDefault
2- plist文件
3-数据库
如果你有一些小的数据,那么,和NSUserDefaults的PLIST是最好的选择(无需创建数据库)。 但是,如果你有大量的数据,那么我建议你使用适当的DataBase(Sqlite或CoreData)。
我建议你在文档目录中以自己的格式保存数据。 – rckoenes
'NSUserDefaults'适用于小型设置,而不是数据存储。这是因为它在应用程序启动时全部加载到内存中, – rckoenes
我将数据保存为本地文件,并且现在不会将其加载到内存中。 – tomfriwel