从 NSUserDefaults 缓存结果?
Cache results from NSUserDefaults?
尝试一些 iOS 编程,我正在使用 NSUserDefaults 来保存我的应用程序需要的几个 NSNumbers。我正在使用典型的代码来获取和设置值,例如
- (NSNumber *)myUserDefaultNumber {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
return [defaults objectForKey:@"XYZ_MyNumber"];
}
但我不知道的是运行时成本。我可以像常规 getter 一样使用它,在我需要像 [self myUserDefaultNumber];
这样的值时调用它,可能经常调用它吗?
或者是否有足够的额外成本会促使我缓存,例如:
// setup a property called myUserDefaultNumber, and
- (NSNumber *)myUserDefaultNumber {
if (!_myUserDefaultNumber) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_myUserDefaultNumber = [defaults objectForKey:@"XYZ_MyNumber"];
}
return _myUserDefaultNumber;
}
我知道我不应该过早优化,但一开始就做明显愚蠢的事情也是错误的。我的第一种方法比简单的内存获取差多少? (关于 setter 的相同问题,它可能更贵)。
如果有问题,您可能找错地方了。 objectForKey
开销很低。高开销(如果有的话)肯定是 standardUserDefaults
,因为它在某些时候必须从磁盘加载信息。
但是,您不知道它什么时候这样做或者多久这样做,所以缓存任何东西真的没有意义你自己。您只需要像往常一样假设运行时比您知道的更多。请记住,NSUserDefaults 是用来使用的——很多。它不会有任何 "gotchas".
I know that I shouldn't optimize too early, but its also wrong to do obviously dumb things to begin with.
是的,但这里的危险在于您正在做的蠢事是过早优化。如果文档没有提醒您任何可能的问题,通常可以安全地假设不会有任何问题。
尝试一些 iOS 编程,我正在使用 NSUserDefaults 来保存我的应用程序需要的几个 NSNumbers。我正在使用典型的代码来获取和设置值,例如
- (NSNumber *)myUserDefaultNumber {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
return [defaults objectForKey:@"XYZ_MyNumber"];
}
但我不知道的是运行时成本。我可以像常规 getter 一样使用它,在我需要像 [self myUserDefaultNumber];
这样的值时调用它,可能经常调用它吗?
或者是否有足够的额外成本会促使我缓存,例如:
// setup a property called myUserDefaultNumber, and
- (NSNumber *)myUserDefaultNumber {
if (!_myUserDefaultNumber) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
_myUserDefaultNumber = [defaults objectForKey:@"XYZ_MyNumber"];
}
return _myUserDefaultNumber;
}
我知道我不应该过早优化,但一开始就做明显愚蠢的事情也是错误的。我的第一种方法比简单的内存获取差多少? (关于 setter 的相同问题,它可能更贵)。
如果有问题,您可能找错地方了。 objectForKey
开销很低。高开销(如果有的话)肯定是 standardUserDefaults
,因为它在某些时候必须从磁盘加载信息。
但是,您不知道它什么时候这样做或者多久这样做,所以缓存任何东西真的没有意义你自己。您只需要像往常一样假设运行时比您知道的更多。请记住,NSUserDefaults 是用来使用的——很多。它不会有任何 "gotchas".
I know that I shouldn't optimize too early, but its also wrong to do obviously dumb things to begin with.
是的,但这里的危险在于您正在做的蠢事是过早优化。如果文档没有提醒您任何可能的问题,通常可以安全地假设不会有任何问题。