Kurz gesagt: ist es schnell/billig? Ist es sinnvoll, einen Wert aus NSUserDefaults im Speicher für einen schnelleren Zugriff zu speichern?Wird der Zugriff auf NSUserDefaults auf iOS als billig angesehen?
Länger: sagen, ich habe erhebliche Anzahl von Werten gespeichert und von NSUserDefaults gelesen werden; mit der Notwendigkeit, auf diese Werte häufig zuzugreifen (zu lesen).
Im folgenden Ausschnitt initialisiere ich eine private gespeicherte Eigenschaft und lasse sie mit dem entsprechenden NSUserDefaults-Wert synchronisieren - also wenn ich sie lesen muss, lese ich die Eigenschaft.
Wenn das Lesen von den Standards direkt in der Tat schnell ist, würde ich das Privateigentum offensichtlich entfernen. Aber ich bin mir nicht sicher. Ist es schnell?
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()
}
}
Klarstellung für künftige Leser: die Frage wird über lesen, nicht schreiben/Synchronisierung, die (wie in den Antworten darauf) nicht schnell noch billig.
.synchronize()
wird im Setter aus einem gültigen Grund aufgerufen - in meinem speziellen Fall ist es wichtig, dass es sofort synchronisiert wird, also opfere ich Leistung für die logische Integrität. In den meisten Fällen sollten Sie überlegen, ob Sie sie anrufen müssen oder ob das System eine angemessene Zeit für das Schreiben auswählen soll.
..In der Tat, jetzt, dass ich es sehe, ich sehe die gespeicherte Eigenschaft zu halten, wie es im Schnipsel ist, wird Logikintegrität bieten (solange Zugriff von anderen Orten geschieht über den Getter, und nicht direkt aus userDefaults). So kann ich auch synchronizing
hier vermeiden.
Zugriff ist billig, Synchronisierung kann summieren, wenn Sie es schnell tun –