Ich habe ein Spiel und ich ständig Benutzerfortschritt speichern. Es ist ein extrem schnell fortschreitendes Spiel und an einigen Stellen im Spiel kann es sechs Mal pro Sekunde zu einer großen Benutzerentwicklung kommen, weshalb ich einige Progressionsvariablen in NSUserDefaults speichern und 6 Mal pro Sekunde synchronisieren muss. Das funktioniert gut auf meinem iPhone6s 64GB, aber ich befürchte, es könnte nicht etwas sein, das ein iPhone4 16GB verarbeiten kann.NSUserDefaults Leistungsprobleme
Ich habe keine Möglichkeit, es zu testen, weil Simulator mit solchen Dingen nicht wirklich genau ist und ich kein langsameres Gerät habe. Ich kann auch nicht viele Details zu NSUserDefaults-Preformance-Berichten in der Dokumentation finden. Hat jemand Wissen zu dem Thema?
Ich überlege, Variablen in einem lokalen NSDictionary zu speichern, das ich in meiner .h definieren und dann nur NSUserDefaults während AppWillResignActive speichern und synchronisieren werde, aber ich sorge mich um Datenverlust im Falle eines Absturzes, Gerätebatterie stirbt, usw. Ich nehme an, ich könnte einen NSTimer haben und die Daten alle 5 Sekunden oder so speichern und auch appWillResignActive speichern, um den Verlust im Falle eines Absturzes zu minimieren. Ich würde es vorziehen, nicht große Mengen meines Codes neu schreiben zu müssen, obwohl NSUserDefaults auf kleineren Geräten gut umgehen kann.
Beachten Sie, dass das Aufrufen von "Synchronisieren" nichts mit dem Schreiben der Daten auf die Festplatte zu tun hat. Es ist lediglich eine Synchronisierung mit einer anderen App, die den gleichen Standardspeicher liest und schreibt (das ist unglaublich selten, und für Nicht-Apple-Apps fast unmöglich, unter iOS zu verwenden). 'synchronize' wird bald (endlich) veraltet sein, weil es nichts mehr macht, was die Leute denken. Siehe den Artikel über die ordnungsgemäße Verwendung von NSUserDefaults von seinem Betreuer: http://dscoder.com/defaults.html –
Danke @RobNapier Das war mir nicht bewusst! –
Während ich den Antworten zustimme, nennst du 'synchronisiere' zu viel atm, ich möchte darauf hinweisen, dass dein" Anliegen "wahrscheinlich unbegründet ist ... Wie viele deiner User haben eigentlich noch ein iPhone 4? [Dieser Link] (https://mixpanel.com/trends/#report/iphone_models/from_date:20,to_date:0) deutet darauf hin, dass der Marktanteil nur etwa 1% beträgt. Ich würde davon abraten, einen großen Teil Ihrer Zeit damit zu verbringen, für 1% zu optimieren. –