Ich fürchte, das ist eine etwas abstrakte Frage. Ich schreibe im Grunde ein iPhone-Spiel, das sich um ein Haustier dreht, ein bisschen wie ein Tamagotchi zum Beispiel. Ich habe ein Pet-Objekt erstellt, das alle Daten enthält, die für den Status des Haustiers relevant sind. Der Rest des Programms greift auf die Daten des Haustiers zu und führt die entsprechenden Aktionen aus.
Das Haustier wird mit den Methoden encodeWithCoder und initWithCoder in einer Datei gespeichert. Wenn also eine Methode im Programm auf Pet-Daten zugreifen muss, wird eine neue Instanz des Pet erstellt, indem es aus der Datei geladen wird. Alle Änderungen werden in den Methoden der Pet-Klasse vorgenommen. Diese Methoden enden immer mit dem Schreiben des Pet in die Datei.
Während das Programm läuft, wird also ständig in die Datei geschrieben und aus der Datei gelesen, jedes Mal, wenn eine Änderung vorgenommen wird. Wenn ich dem Pet eine neue Variable hinzufügen möchte, z. B. eine BOOL-Variable namens showReaction (um zu bestimmen, ob die Reaktion des Pet auf ein bestimmtes Ereignis angezeigt werden soll oder nicht), muss ich diese Variable sowohl in meine encodeWithCoder- als auch in meine initWithCoder-Methode aufnehmen. Das erscheint mir etwas umständlich, da diese Methoden folglich immer größer werden. Und das ständige Lesen und Schreiben in eine Datei scheint ineffizient zu sein.
Ich hätte gedacht, dass es besser wäre, eine globale Variable zu haben, die das Pet darstellt. Und dass jede Methode im Programm auf diese globale Variable zugreifen kann, um sie zu ändern. Ich schreibe nur dann in die Datei, wenn der Spieler das Spiel verlässt, und ich lese nur einmal aus der Datei, wenn das Spiel geladen wird.
Meine Frage ist - ich bin mir nicht ganz sicher, wie ich das am besten angehen soll. Und ob dies eine gute Programmierpraxis ist oder nicht? Sollte ich die globale Variable in meinem Haupt-ViewController deklarieren und sie dann während der Ausführung des Programms nicht freigeben? Kann ich Variablen in der Pet-Klasse ändern und diese Daten während der Ausführung des Programms beibehalten? D.h. showReaction in einer Methode auf TRUE setzen, in einer anderen Methode auslesen und in einer anderen Methode auf FALSE setzen?
Für jeden Ratschlag wären wir Ihnen sehr dankbar. Ich schreibe dieses Programm jetzt schon eine Weile und frage mich, ob ich diese Änderungen jetzt vornehmen sollte, bevor ich noch mehr schlechte Praktiken einführe. Aber angesichts des Umfangs meines Codes möchte ich nicht zu viel experimentieren, ohne mich vorher bei den Experten zu erkundigen!
Danke,
Michael