尝试一些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;
}
我知道我不应该过早地进行优化,但是从一开始就做出明显愚蠢的事情也是错误的。比简单的记忆更糟糕的是我的第一种方法? (关于设定者的相同问题,可能更昂贵)。
答案 0 :(得分:2)
如果出现问题,您可能会在错误的地方寻找它。 objectForKey
开销很低。高开销(如果有的话)肯定是standardUserDefaults
,因为它在某些时候必须从磁盘加载信息。
但是, 你必须假设,像往常一样,运行时比你更了解。请记住,NSUserDefaults可以使用 - 很多。它不会有任何"陷阱"。
我知道我不应该过早地进行优化,但从一开始就做出明显愚蠢的事情也是错误的。
是的,但这里的危险是,你正在做的蠢事 过早地进行优化。如果文档没有提醒您任何可能的问题,那么通常可以安全地假设它不会成为任何问题。