使用全局变量真的太可怕吗?

时间:2012-01-19 21:22:45

标签: objective-c

我一直在使用Objective-C开发很长时间,主要是游戏,很多人评论说我经常使用全局变量。例如,在@implementation之前我的.m文件中我主要有:

BOOL X=0;
int y=1;
NSString *ran;
.
.
.

现在,我知道我必须使用属性,我发现使用这个全局变量更加清晰,我保证它们安全。

除了它不是面向对象和/或不可接受的事实外,它是否会影响我的应用程序的任何其他方面,如处理器操作?

在我的游戏中,我在一个类中有40个布尔值,几乎所有方法共享。我发现写getter / setter几乎是不可能的,或者对所有这些都使用属性,我对自己的方式很满意。 但是它错了吗?

还有另一种方法来处理许多经常实时变化的布尔值,并且被所有方法共享吗?

使用全局变量是否太可怕了? (我不需要被认为是好的Objective-C用户......)

3 个答案:

答案 0 :(得分:2)

全局变量通常被认为是不好的做法,因为从长远来看它们会导致编码问题。如果您发现自己能够维护代码,那么请继续。

但最终,你会在一个足够大的项目上工作,它会导致问题。为什么不在没有它们的情况下学习如何在更容易的项目上相处?

答案 1 :(得分:1)

ObjC在这方面与其亲属没有多大区别。

问题是该程序在其他环境中很难使用。也就是说,完全重新实现一个程序可能是一个更好的选择,而不是让40个全局变量重用(并重新测试所有东西)。

一个班级的40个布尔人也是一个llllloooooooot。阅读您的代码 - 寻找模式。如果你想摆脱全局变量,那么制作更小,更容易重复使用的实现。许多开发人员认为这是巨大的维护痛苦(战争故事!)。我很容易发现自己无法理解这样一个程序的程序流程。

甚至将40个bool打包成C结构,并在ObjC类中放置该结构的实例将是一个很大的改进,很容易实现。

如果您在维护这些程序时没有任何问题,请将其视为祝福! ......但对于阅读,扩展或维护该程序的其他人来说,它不会是最受欢迎的设计。

答案 2 :(得分:1)

与大多数开发实践一样,全局变量占有一席之地,但它们减少了代码的可重构性,可读性和可调试性。想象一下以下场景:

  1. 在一个函数中有错误的程序,但错误是由全局变量引起的。哪个其他位置产生了不良价值?这几乎是不可能的。

  2. 没有编写代码的人想要改变某些东西,但不知道全局值来自哪里。弄清楚程序如何工作的方法是了解全局变量的使用位置。这比你简单地封装你的功能要困难得多。

  3. 一段代码一遍又一遍地重复(每个方法都可以访问你的全局,所以他们都使用它,但只是用不同的方式)。需求发生变化,您需要稍微改变其工作方式。您现在必须更改代码中的143个不同位置。 (有一次我不得不这样做是因为当软件从英语系统变为公制时.30个不同的代码位置都使用不同的转换值来做同样的事情)

  4. 另一方面,如果遇到性能问题,有时候有一个全局会加快速度,但编写可读性,可折射性和可调试性的代码要好得多,然后在必要时进行重构以提高性能。