gpt4 book ai didi

ios - NSUserDefaults 导致性能问题

转载 作者:行者123 更新时间:2023-11-28 18:58:26 26 4
gpt4 key购买 nike

我相信我有过度使用 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);

输出:

Time For Function: 4.1

最佳答案

如果你要存储大量数据,你绝对不应该使用 NSUserDefaults 来这样做。

NSUserDefaults 非常适合用于标志、简单设置或用户变量(如昵称)等。本质上是用户偏好。

这是因为:

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

应该使用 Core Data 来存储数据: 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 用作临时数据库也不是好的做法。

关于ios - NSUserDefaults 导致性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com