2017-05-08 55 views
0

最近我发现,当我保存,例如,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 
} 
*/ 
+0

我建议你在文档目录中以自己的格式保存数据。 – rckoenes

+0

'NSUserDefaults'适用于小型设置,而不是数据存储。这是因为它在应用程序启动时全部加载到内存中, – rckoenes

+0

我将数据保存为本地文件,并且现在不会将其加载到内存中。 – tomfriwel

回答

0

NSUserDefaults真的意味着存储的少量数据,如设置,偏好,以及个人价值观。

推荐使用核心数据或SQLite的存储元件的一个大的列表。

有大约源码与核心数据的一个很好的问题; Working with data in iOS AppsCore Data vs SQLite 3堆栈溢出,你可能想读通过这个问题的答案。

0

汤姆, 有iOS中许多的方式来存储数据。

1- NSUserDefault

2- plist文件

3-数据库

如果你有一些小的数据,那么,和NSUserDefaults的PLIST是最好的选择(无需创建数据库)。 但是,如果你有大量的数据,那么我建议你使用适当的DataBase(Sqlite或CoreData)。

相关问题