2011-01-17 5 views
0

Ich bin sehr neu in Core Data und ich lerne immer noch, wie alles unter der Haube funktioniert. Meine Core Data-Modellhierarchie enthält ein Benutzerprofil, das eine Reihe von zehn verschiedenen Ebenen enthält, die eine Eins-zu-viele-Beziehung verwenden, wobei jede Ebene 30 verschiedene Rätsel enthält, die ebenfalls eine Eins-zu-viele-Beziehung verwenden.iOS-Entwicklung: Wie kann ich meinen Core-Datenspeicherverbrauch straffen?

UserProfile (x1) -> Level (x10) -> Puzzle (x30), for a grand total of 311 objects per user profile 

Die Levels und Puzzles Modelle werden verwendet, um den Fortschritt des Benutzers zu speichern, da der Benutzer die Rätsel nacheinander löst. Wenn das Spiel zum ersten Mal ausgeführt wird, liest das Spiel alle Ebenen und Puzzles von einem Plist und generiert Core Data-Objekte (Tabellenzeilen), die verwendet werden, um den Fortschritt des Spielers während des Spiels zu speichern. Mit anderen Worten, die Liste der Core Data-Objekte wächst nicht, wenn der Benutzer das Spiel spielt, sondern wird am Anfang erstellt und die Eigenschaften der Objekte ändern sich, wenn der Benutzer das Spiel spielt. Ich vermute, dies ist ineffizient, tho meine Fragen gleich bleiben ...

  1. Wenn ich ein Benutzerprofil von Core Data laden, werden auch alle zehn Ebenen laden, sowie die 30 Rätsel für jede Ebene in den Speicher ? Ich frage, weil ich offensichtlich nicht alle diese Daten benötige, wenn der Spieler nur eine Ebene gleichzeitig spielt.
  2. Wenn alle Level- und Puzzle-Daten in den Speicher geladen werden, wenn das Benutzerprofil geladen wird, wie kann ich die Level- und Puzzle-Daten "faul" laden, wie sie benötigt werden?
  3. Wenn ich mein Spiel mit dem Allocations-Instrument starte, zeigt es an, dass es 6 MB "Overall" Speicher verwendet, wenn die App voll geladen ist und im Hauptmenü sitzt. Offensichtlich nimmt die Speichernutzung zu, wenn der Benutzer tiefer in den Navigationsstapel eintaucht. Wird 6MB als "viel" Speicher für eine gerade begonnene App betrachtet?
  4. Ich habe festgestellt, dass 6MB immer noch verwendet wird, wenn ich die Codezeile, die das Profil des Benutzers aus Core Data lädt, auskommentiere. Bedeutet dies, dass die Auswirkungen, die meine Core Data-Objekte auf den Speicher haben, vernachlässigbar sind?

Ich entschuldige mich, wenn diese Fragen unverschämt sind und ich entschuldige mich für ihre Länge, und vielen Dank für Ihre Weisheit! Ich gehe jetzt zurück zu den Core Data-Dokumenten, ich dachte nur, ich würde diese Fragen veröffentlichen, während ich das Selbst-Unterrichten fortsetze.

Antwort

1

Dies beantwortet Ihre Frage "Lazy Load". Core Data to-many relationships. Are they Lazy Load?

Ich würde nicht über 6 MB Speicher kümmern, wenn Sie ein Leistungsproblem sehen. Sie können es immer mit den mitgelieferten Dienstprogrammen überprüfen.

+0

Danke, DieLaughing! Irgendwelche Gedanken zu Fragen 3 und 4? – BeachRunnerFred

+0

Vielleicht möchten Sie verschiedene ManagedObjectContexte für jede Ebene verwenden, und zwar aus einem anderen Grund, als sich mit der Funktionsweise von CoreData vertraut zu machen. – DieLaughing

+0

Stellen Sie sicher, dass Sie eine SQLite-Unterstützung für CoreData verwenden. Wenn Sie nicht alle Informationen gleichzeitig laden müssen. – ughoavgfhw

Verwandte Themen