简而言之:快速/便宜吗?将NSUserDefaults中的值存储在内存中以加快访问速度是否有意义?
更长:例如,我有大量要存储和从NSUserDefaults中读取的值;需要经常访问(读取)这些值。
在下面的代码段中,我初始化了一个私有(private)存储的属性,并使其与相应的NSUserDefaults值同步-因此,当我需要读取它时,我会读取该属性。
如果直接从默认值读取实际上是快速的,显然,我会删除私有(private)属性。但是我不确定。快吗
private var _loggedIn = NSUserDefaults.standardUserDefaults().boolForKey("loggedIn")
public var loggedIn: Bool {
get {
return _loggedIn
}
set {
_loggedIn = newValue
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "loggedIn")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
为将来的读者澄清:,问题是关于阅读,而不是写作/同步,这(如答案中所指出的)既不快捷也不便宜。
在setter中调用
.synchronize()
是有道理的-在我的特定情况下,立即对其进行同步很重要,因此为了逻辑完整性我牺牲了性能。在一般情况下,您应该考虑是否需要调用它-或让系统选择适当的时间进行编写。..事实上,现在我看了一下,我看到将存储的属性保留在代码段中,将提供逻辑完整性(只要从其他位置进行的访问是通过getter进行的,而不是直接从userDefaults进行的)。所以我也可以在这里避免
synchronizing
。 最佳答案
读书很便宜。那里有大量的缓存,一切都发生在RAM中。突变相对便宜,但是系统仍将必须定期将内容存储到非 volatile 存储器(闪存上的.plist文件)。
显式同步并不便宜。它消耗时间和更多的精力。
因此,对于读取来说,这很好,但是对于大量写入操作,我仍然会在单独的容器中进行操作,并且仅在需要时才进行序列化。
关于ios - 在iOS上访问NSUserDefaults是否便宜?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34887633/