use*_*109 5 nsuserdefaults ios
简而言之:快速/便宜吗?将NSUserDefaults中的值存储在内存中以便更快地访问是否有意义?
更长:说,我有大量的值要存储和读取NSUserDefaults; 需要经常访问(读取)这些值.
在下面的代码片段中,我初始化一个私有存储属性,并保持与相应的NSUserDefaults值同步 - 所以当我需要读取它时,我读取了属性.
如果直接读取默认值实际上很快,我显然会删除私有财产.但我不确定.它快吗?
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()
}
}
Run Code Online (Sandbox Code Playgroud)
对未来读者的澄清:问题是关于阅读,而不是写作/同步,这是(如答案中所指出的)不快速也不便宜.
.synchronize()在setter中调用是有正当理由的 - 在我的特定情况下,让它立即同步是很重要的,所以我牺牲性能来保持逻辑完整性.在一般情况下,您应该考虑是否需要调用它 - 或者让系统选择适当的写入时间.
..In事实上,现在我看,我看到保持存储的属性,因为它是在片段中,将提供逻辑完整性(从其他地方只要获得通过吸气发生,从userDefaults不是直接).所以我也可以synchronizing在这里避免.
阅读很便宜.有一个慷慨的缓存,一切都发生在RAM中.变异相对便宜,但系统仍然必须定期将内容存储到非易失性存储器(闪存上的.plist文件).
显式同步并不便宜.它吃的时间和能量.
因此对于读取它很好,但是通过大量写入,我仍然可以在单独的容器中进行,并且仅在需要时进行序列化.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |