我相信我有过度使用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
答案 0 :(得分:4)
如果要存储大量数据,则绝对不应使用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是不太好的做法。