ios – 来自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;
}

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

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

但是,你不知道它什么时候发生,或者多久发生一次,所以自己没有任何缓解任何东西的意义.你必须假设,像往常一样,运行时比你更了解.请记住,NSUserDefaults可以使用 – 很多.它不会有任何“陷阱”.

I know that I shouldn’t optimize too early, but its also wrong to do obviously dumb things to begin with.

没错,但这里的危险是,你所做的愚蠢的事情是过早地进行优化.如果文档没有提醒您任何可能的问题,通常可以安全地假设没有任何问题.

点赞