NSUserDefaults导致性能问题

时间:2015-03-17 14:55:04

标签: ios nsuserdefaults

我相信我有过度使用NSUserDefaults引起的cpu性能问题这可能吗?我正在调试一些用它来存储大量用户数据的代码,现在对存储数据的后续调用每次调用超过4秒。什么会导致这些长时间的延误?

   // Save data in user defaults
    NSDate *timerStartTime = [NSDate date];

    NSLog(@"Data Size %lu", (unsigned long)[result.data length]);
    [self setObject:result.data forKey:defaultName];
    NSTimeInterval elapsed = [[NSDate date] timeIntervalSinceDate:timerStartTime];
    NSLog(@"Time For Function: %f", elapsed);

和输出:

功能时间:4.1

1 个答案:

答案 0 :(得分:4)

如果要存储大量数据,则绝对不应使用NSUserDefaults。

NSUserDefaults适用于诸如标志,简单设置或用户变量(如昵称等)之类的内容。基本上是用户首选项。

这是因为:

  • NSUserDefaults每次加载时都会加载并保存完整。
  • NSUserDefaults在应用程序启动时加载,因此您不能 螺纹加载过程。

应使用核心数据存储数据: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

或者,如果它只是字典或字符串数​​组,您可以使用属性列表: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html

NSUserDefaults确实使用pList存储其数据,因此您会遇到一些相同的限制,但您可以更好地控制何时以及如何编写或读取数据。此外,当NSUserDefaults具有预期的偏好目的时,将NSUserDefaults用作生产转移DB是不太好的做法。