【发布时间】:2017-10-06 05:24:06
【问题描述】:
我最近发现,例如,当我将 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用于小型设置,而不是作为数据存储。这是因为它在应用启动时全部加载到内存中, -
我将数据保存为本地文件,现在无法加载到内存中。
标签: ios objective-c performance nsuserdefaults