使用全局变量vs读取和写入文件

时间:2010-07-12 11:37:46

标签: objective-c global-variables

我担心这是一个抽象的问题。我基本上是在写一个围绕宠物的iPhone游戏,有点像电子宠物。我创建了一个Pet对象,其中包含与Pet状态相关的所有数据。程序的其余部分访问Pet的数据并执行相关操作。

使用encodeWithCoder和initWithCoder方法将宠物保存到文件中。因此,只要程序中的方法需要访问任何宠物数据,它就会通过从文件加载来创建宠物的新实例。如果进行了任何更改,则它们在Pet类的方法中完成。这些方法总是通过将Pet写入文件来结束。

因此,当程序运行时,每次进行更改时,它都会不断写入文件并从文件中读取。如果我想要向Pet添加一个新变量,比如说一个名为showReaction的BOOL变量(以确定是否显示Pet对某个事件的反应),我必须在我的encodeWithCoder和initWithCoder方法中包含这个变量。这看起来有点麻烦,因为这些方法因此越来越大。并且不断地读取和写入文件似乎效率低下。

我原本以为更好的方法是拥有一个代表Pet的全局变量。并且程序中的任何方法都可以访问此全局变量以进行更改。我写入文件的唯一时间是玩家退出游戏时,我只在游戏加载时从文件中读取一次。

我的问题是 - 我不确定最好的方法。这是否是一个好的编程实践?我应该在我的主ViewController中声明全局变量,然后在程序运行期间不要释放它吗?我是否能够在Pet类中更改变量并在程序运行期间保留此数据。即在一个方法中将showReaction设置为TRUE,在另一个方法中将其读取并在另一个方法中将其设置为FALSE ...

非常感谢任何建议。我已经写了这个程序一段时间了,我想知道我是否应该在我进一步纠正任何不良做法之前做出这些改变。但考虑到我的代码大小,我不想在没有先咨询专家的情况下进行太多实验!

谢谢,

迈克尔

2 个答案:

答案 0 :(得分:1)

为什么不创建单身人士?这样你的代码就不用担心它是如何完成的。尝试解耦你的代码。

答案 1 :(得分:0)

我认为在抽象层面上说你最好的情况有点困难,但通常看起来更简单的往往是最好的方法。只有一个与之交互的全局实例似乎是一种非常直接的方式。