use*_*965 5 objective-c nsuserdefaults ios
尝试一些 iOS 编程,我使用 NSUserDefaults 来保存我的应用程序需要的几个 NSNumbers。我正在使用典型的代码来获取和设置值,例如
- (NSNumber *)myUserDefaultNumber {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
return [defaults objectForKey:@"XYZ_MyNumber"];
}
Run Code Online (Sandbox Code Playgroud)
但我不知道的是运行时成本。我可以像普通的 getter 一样使用它,在我需要像 那样的值时调用它[self myUserDefaultNumber];,可能经常吗?
或者是否有足够的额外成本来激励我进行缓存,例如:
// setup a property called myUserDefaultNumber, and
- (NSNumber *)myUserDefaultNumber {
if (!_myUserDefaultNumber) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_myUserDefaultNumber = [defaults objectForKey:@"XYZ_MyNumber"];
}
return _myUserDefaultNumber;
}
Run Code Online (Sandbox Code Playgroud)
我知道我不应该过早优化,但一开始就做明显愚蠢的事情也是错误的。我的第一种方法比简单的记忆差多少?(关于 setter 的同样问题,它可能更贵)。
如果出现问题,您可能是在错误的位置寻找它。objectForKey开销低。如果有的话,高开销肯定是高开销standardUserDefaults,因为它在某些时候必须从磁盘加载信息。
但是,您不知道它何时执行此操作或执行此操作的频率,因此您自己缓存任何内容确实没有意义。您只需假设,像往常一样,运行时比您知道更多。请记住,NSUserDefaults 是为了被大量使用而设计的。它不会有任何“陷阱”。
我知道我不应该太早优化,但一开始就做明显愚蠢的事情也是错误的。
确实如此,但这里的危险在于,你所做的愚蠢的事情就是过早优化。如果文档没有提醒您任何可能的问题,通常可以安全地假设不会有任何问题。
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |