最近我发现,当我保存,例如,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
}
*/
我建议你在文档目录中以自己的格式保存数据。 – rckoenes
'NSUserDefaults'适用于小型设置,而不是数据存储。这是因为它在应用程序启动时全部加载到内存中, – rckoenes
我将数据保存为本地文件,并且现在不会将其加载到内存中。 – tomfriwel