从NSUserDefaults缓存结果?

时间:2015-01-25 19:16:23

标签: ios objective-c 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;
}

我知道我不应该过早地进行优化,但是从一开始就做出明显愚蠢的事情也是错误的。比简单的记忆更糟糕的是我的第一种方法? (关于设定者的相同问题,可能更昂贵)。

1 个答案:

答案 0 :(得分:2)

如果出现问题,您可能会在错误的地方寻找它。 objectForKey开销很低。高开销(如果有的话)肯定是standardUserDefaults,因为它在某些时候必须从磁盘加载信息。

但是, 你必须假设,像往常一样,运行时比你更了解。请记住,NSUserDefaults可以使用 - 很多。它不会有任何"陷阱"。

  

我知道我不应该过早地进行优化,但从一开始就做出明显愚蠢的事情也是错误的。

是的,但这里的危险是,你正在做的蠢事 过早地进行优化。如果文档没有提醒您任何可能的问题,那么通常可以安全地假设它不会成为任何问题。