Je crains que ce soit une question abstraite. Je suis en train d'écrire un jeu iPhone qui tourne autour d'un animal de compagnie, un peu comme un tamagotchi par exemple. J'ai créé un objet Pet, qui contient toutes les données relatives à l'état de l'animal. Le reste du programme accède aux données de l'animal de compagnie et effectue des actions pertinentes.Utilisation d'une variable globale par rapport à la lecture et l'écriture dans le fichier
L'animal de compagnie est enregistré dans un fichier en utilisant les méthodes encodeWithCoder et initWithCoder. Ainsi, chaque fois qu'une méthode dans le programme doit accéder à des données d'animal de compagnie, elle crée une nouvelle instance de l'animal de compagnie en le chargeant à partir du fichier. Si des modifications sont apportées, elles sont effectuées dans les méthodes de la classe Pet. Ces méthodes se terminent toujours en écrivant l'animal de compagnie dans le fichier. Alors que le programme est en cours d'exécution, il écrit constamment dans le fichier et lit à partir du fichier, chaque fois qu'une modification est apportée. Si je veux ajouter une nouvelle variable à l'animal de compagnie, disons une variable BOOL appelée showReaction (pour déterminer si oui ou non la réaction de l'animal de compagnie à un certain événement), je dois inclure cette variable dans mes deux méthodes encodeWithCoder et initWithCoder . Cela semble un peu lourd puisque ces méthodes sont par conséquent de plus en plus grandes. Et constamment lire et écrire dans un fichier semble inefficace.
J'aurais pensé qu'une meilleure approche serait d'avoir une variable globale qui représente l'animal de compagnie. Et que toute méthode dans le programme peut accéder à cette variable globale afin de la changer. La seule fois où j'écris dans un fichier est quand le joueur quitte le jeu, et je lis seulement à partir du fichier une fois quand le jeu se charge.
Ma question est - je ne suis pas exactement sûr de la meilleure approche à ce sujet. Et si c'est une bonne pratique de programmation? Devrais-je déclarer la variable globale dans mon ViewController principal, puis m'abstenir de la relâcher pendant l'exécution du programme? Serai-je capable de modifier les variables de la classe Pet et de conserver ces données pendant l'exécution du programme. C'est à dire. définir showReaction sur TRUE dans une méthode, en le lisant dans une autre méthode et en le définissant sur FALSE dans une autre méthode ...
Un conseil serait grandement apprécié. J'écris ce programme depuis un moment maintenant, et je me demande si je devrais faire ces changements avant que je n'insinue de mauvaises pratiques plus loin. Mais vu la taille de mon code, je ne veux pas trop expérimenter sans d'abord consulter les experts!
Merci,
Michael
Ah je vois - un singleton hein. Je n'étais pas au courant auparavant d'une telle chose. Bien qu'ayant lu un peu sur ce forum, il semble y avoir un peu de sentiment anti-singleton. Je vais regarder de plus près, mais merci pour le conseil :) – Smikey
Oui, il est mauvais d'utiliser le motif singleton trop, peut-être votre conception est fausse, mais le problème que vous êtes actuellement confronté serait résolu en mettant en œuvre un singleton pattern ... il vaut mieux que d'utiliser une variable globale et a des utilisations valides, mais ne les traite pas comme une solution magique à tous les problèmes. –
Désolé, j'aurais dû formuler cela - utiliser trop de singletons est mauvais. –