2016-05-24 8 views
3

Ich habe eine App und es ruft Variablen absichtlich. Und diese Variablen sind in NSUserDefaults gespeichert.iOS: Geschwindigkeit des Lesens NSUserDefaults vs Variablen

Ich frage mich, wo NSUserDefaults speichert? Und wenn ich direkt zu NSUserDefaults aufrufen statt zu Variablen verwenden.

Was ist schneller? Variablen oder NSUserDefaults. Die Verwendung von Variablen zum Speichern von NSUserDefaults wird die Ursache für die Verwendung von mehr Speicher sein.

+0

können Sie direkt verwenden, wenn Sie Variable für die zukünftige Verwendung nicht benötigen, sonst müssen Sie alle Zeit abrufen –

+0

Ihre Frage nicht richtig bekommen – Lion

+0

Ich kümmere mich um Geschwindigkeit, Variablen wird in RAM (Speicher) gespeichert, aber ich weiß nicht, wie 'NSUserDefaults' funktioniert – TomSawyer

Antwort

6

NSUserDefaults persistent seine Daten auf der Festplatte, so dass irgendwann diese Daten von der Festplatte geladen werden müssen, um sie im Speicher zu speichern. Es muss es wieder auf die Festplatte schreiben, wenn Sie es an synchronize sagen.

Einmal im Speicher, wird es in einem Wörterbuch-ähnlichen Container gespeichert (wahrscheinlich NSMutableDictionary).

von beide Plattenlese ist sehr teuer im Vergleich zu einer Variable direkt zu lesen und aus einem Wörterbuch zu lesen ist mäßig teuer im Vergleich zu einem variablen lesen.

Variablen lesen/schreiben ist es viel schneller.

+0

Woher weiß ich, wann es im Speicher gespeichert wurde? Zum Beispiel: ich benutze 'NSUserDefaults', um Einstellungen meiner App zu speichern (eine Tastaturerweiterung), jetzt in der Initialisierung, rufe ich' NSUserDefaults' auf, um alle Einstellungen zu erhalten, die ich will, und sie in einige globale Variablen zu speichern. Die Frage ist, wenn ich diese Variablen nicht verwenden möchte, sollte ich direkt den Wert von 'NSUserDefaults' verwenden? Wird es bessere Leistung bekommen? Meine Erweiterung ruft jede halbe Sekunde die 'NSUserDefaults' auf. Es ist eine Tastaturerweiterung. Wenn der Benutzer nicht verwendet wird, wird der Prozess nicht beendet. Aber nach dem 'viewDidDisappear' weiß ich nicht was übrig ist? – TomSawyer

+2

Ich würde die Daten in Variablen (vielleicht einer Singleton-Klasse) speichern und Methoden haben, von 'NSUserDefaults' zu lesen und in' NSUserDefaults' zu schreiben, aber nur diese Lese-/Schreibmethode aufrufen, wenn etwas im App-Lebenszyklus passiert Vordergrund/Hintergrund, etc.) – trojanfoe

+0

Danke, ich mache so, aber die Erweiterung verbraucht viel mehr Speicher als ich erwartet habe, also möchte ich es optimieren. Aber ich weiß nicht wirklich, wie iOS den Speicher mit der Erweiterung speichert/freigibt. Warum sollte ich Singleton anstelle von globalen Variablen verwenden? – TomSawyer

1

NSUserDefaults hat einen anderen Anwendungsfall als Variablen in Ihrem Code.

Die Daten werden in eine Plist-Repräsentation gepackt und müssen auf der Festplatte gespeichert werden (zumindest wenn sie synchronisiert wird) oder von der Festplatte gelesen werden (oder aus dem Cache oder anderen Implementierungsdetails, die Apple für geeignet hält). In jedem Fall sollte die Verwendung der Standardwerte in der Regel wesentlich langsamer sein als die Verwendung einer einfachen Variablen. Und je größer die Benutzereinstellungen werden, desto höher ist die Auswirkung, da es wahrscheinlich davon jedes Mal speichern/lesen wird. Wenn es in Ihrem Anwendungsfall wichtig ist, ist eine andere Frage, die wir nicht beantworten können.

Verwenden Sie den Ansatz, der Ihren Anforderungen entspricht: NSUserDefault, um Einstellungen zwischen Anwendungsstarts und Variablen für den normalen Betrieb beizubehalten. Es ist nichts falsch daran, dass die Einstellungen in einer lokalen Variablen zwischengespeichert werden und nur persistente Änderungen gespeichert werden (möglicherweise nicht jedes Mal, wenn sich etwas ändert).

0

Wenn Sie befürchten, dass das Speichern von Daten in Variablen Speicher benötigt, sollten Sie stattdessen CoreData verwenden. Sie können auch in Betracht ziehen, dass NSUserDefaults Speicher belegt :-)

NSUserDefaults ist Persistent Speicher. Wenn du es richtig anwendest, sind die Daten nach dem Absturz deiner App wieder da. Verwenden Sie es für Dinge, an die Sie sich erinnern möchten, wenn Ihre App das nächste Mal ausgeführt wird. Verwenden Sie Variablen für Dinge, die beim nächsten Start Ihrer App neu gestartet werden können.