【问题标题】:Using a global variable vs reading and writing to file使用全局变量与读写文件
【发布时间】:2010-07-12 11:37:45
【问题描述】:

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

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

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

我认为更好的方法是使用一个代表宠物的全局变量。并且程序中的任何方法都可以访问这个全局变量来改变它。我写入文件的唯一时间是玩家退出游戏时,而我只在游戏加载时从文件中读取一次。

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

任何建议将不胜感激。我已经编写这个程序有一段时间了,我想知道在我进一步根深蒂固任何不好的做法之前,我是否应该现在进行这些更改。但是考虑到我的代码大小,我不想在没有先咨询专家的情况下进行过多的实验!

谢谢,

迈克尔

【问题讨论】:

    标签: objective-c global-variables


    【解决方案1】:

    你为什么不创建一个单例?这样你的代码就不需要担心它是如何完成的。尝试解耦你的代码。

    【讨论】:

    • 啊,我明白了 - 一个单身汉。我以前不知道这样的事情。尽管在这个论坛上阅读了一些内容,但似乎有相当多的反单身情绪。我会进一步研究它,但感谢您的建议:)
    • 是的,过多使用单例模式是不好的,也许你的设计是错误的,但是你现在面临的问题会通过实现单例模式来解决......它比使用更好一个全局变量并具有有效用途,只是不要将它们视为神奇的解决所有问题的解决方案。
    • 对不起,我应该这样说 - 使用太多的单例是不好的。
    • 好的,感谢您的更新。我只会使用一个,所以也许它会起作用。我觉得这比不断地读写文件要好,但是在我的代码的这个阶段,我想知道是否值得进行如此大的改变。那么再次感谢您的建议:)
    • 好吧,您的单例控制对对象的访问,如果您使该对象使用接口,则可以从单例返回接口,而对象的实现方式无关紧要。如果你愿意,你甚至可以改变它在运行时所做的事情。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多