尝试进行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,可能会更加昂贵)。
NSUserDefaults
足够聪明,可以为您进行缓存。除非您确实存在或怀疑实际的性能问题,否则不必担心它。 - rmaddyNSNumber
在哪里和什么时候被使用?它需要频繁访问吗?您是否测试并验证了性能影响?如果是这样,那么最好只是使用其他东西而不是NSUserDefault
。如果没有,那就没问题 :) - Vinzzz