【问题标题】:App will load data stored in user defaults into memory at app launch?应用程序会在应用程序启动时将存储在用户默认值中的数据加载到内存中吗?
【发布时间】: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


【解决方案1】:

NSUserDefaults 真正用于存储小块数据,例如设置、偏好和个人值。

建议使用 Core Data 或 SQLite 来存储大量元素。

关于 sqlite 与 Core Data 有一个非常好的问题; Working with data in iOS AppsCore Data vs SQLite 3 在 Stack Overflow 上,您可能需要通读该问题的答案。

【讨论】:

    【解决方案2】:

    我认为在 NSUserDefaults 中存储没有大小限制。这一切都在设备存储中。 你可以检查这个链接 https://discussions.apple.com/thread/1763096?start=0&tstart=0

    属性列表应该用于主要由字符串和数字组成的数据。当与大块二进制数据一起使用时,它们的效率非常低。

    【讨论】:

      【解决方案3】:

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

      1- NSUserDefault

      2- Plist文件

      3- 数据库

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 2013-11-04
        • 2021-01-14
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        相关资源
        最近更新 更多