In breve: è veloce/economico? Ha senso memorizzare un valore da NSUserDefaults in memoria per un accesso più veloce?L'accesso a NSUserDefaults su iOS è considerato economico?
Più lungo: ad esempio, ho un numero significativo di valori da memorizzare e leggere da NSUserDefaults; con la necessità di accedere (leggere) quei valori frequentemente.
Nello snippet seguente, inizializzo una proprietà privata memorizzata e la mantengo sincronizzata con il valore NSUserDefaults corrispondente, quindi quando ho bisogno di leggerlo, leggo la proprietà.
Se la lettura dei valori predefiniti direttamente è effettivamente veloce, rimuoverei la proprietà privata, ovviamente. Ma non ne sono sicuro. È veloce?
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()
}
}
Precisazione per i lettori futuri: la questione è di circa leggendo, non scrivere/sincronizzazione, che è (come evidenziato nelle risposte) non veloce né economico.
.synchronize()
viene chiamato nel setter per un motivo valido: nel mio caso specifico è importante averlo sincronizzato subito, quindi sacrifico le prestazioni per l'integrità logica. In generale, è necessario considerare se è necessario chiamarlo o lasciare che il sistema scelga il tempo appropriato per la scrittura.
.. Infatti, ora che lo guardo, vedo mantenere la proprietà archiviata così come è nello snippet, fornirà l'integrità logica (purché l'accesso da altri posti avvenga tramite il getter, e non direttamente da userDefaults). Quindi posso evitare anche synchronizing
qui.
L'accesso è economico, la sincronizzazione può essere sommata se lo si fa rapidamente –