2010-12-03 8 views
1

Ich habe ein Singleton, das ein NSArray hat, das erstellt wird, wenn die erste Instanz des Singleton ist. Wann sollte ich dieses Array auf der Festplatte in Dealloc-Methode speichern? Ich habe die Apple-Dokumente überprüft und es heißt, dass Sie nicht in dealloc sollten, aber nicht sagen wo. Soll ich also jedes Mal, wenn das Array geändert wird, auf die Festplatte schreiben? Das scheint wie eine Verschwendung?Speichern von Array auf Platte in einem Singleton

Antwort

3

Im Allgemeinen sollten Sie den Status in der Nähe des Zeitpunkts speichern, zu dem der Status geändert wurde. Wenn der von Ihnen gespeicherte Status sehr klein ist, können Sie warten, bis der Anwendungsdelegate -applicationWillResignAktiv: method aufgerufen wird. Oder Sie könnten Singleton bei NSNotificationCenter registrieren, um UIApplicationWillResignActionNotification zu beobachten. Und dann speichern.

Wenn Ihr Array sehr groß ist, möchten Sie möglicherweise weniger häufig speichern. Sie müssen jedoch auch darauf achten, wie lange es dauern kann, bis das Array auf die Festplatte geschrieben wurde. Abhängig von den Umständen, unter denen Ihre Anwendung als aktiv zurücktritt, erhalten Sie möglicherweise nicht viel Zeit, um auf die Festplatte zu schreiben.

Haben Sie ein gutes Gespür für die maximale Datenmenge, die möglicherweise geschrieben werden muss? Ist das eingeschränkt oder offen?

+0

Nun, jedes Mal, wenn der Benutzer Zellen in einer Tabelle neuordnet (und es gibt tatsächlich 2 NSArrays) die Arrays im Singleton aktualisiert werden, wird der Benutzer wahrscheinlich mehr als eine Zeile auf einmal umsortieren, aber es wird aufgerufen werden Jede Zeile wurde verschoben. Daher möchte ich nicht, dass der Benutzer eine Zeile verschiebt, die App auf Festplatte speichert, der Benutzer eine weitere Zeile eine Millisekunde später verschiebt und erneut auf Festplatte speichern muss. –

+0

Gibt es eine Vorstellung davon, dass der Benutzer zuletzt tätig geworden ist ändert sich, wie ein "Fertig" Knopf? Gibt es einen "Cancel", der die letzten Änderungen verwerfen würde? – westsider

+0

Wie könnte ich das vergessen haben? Warum habe ich die Frage gestellt :) –

Verwandte Themen