Objective-C中全局变量的缺陷和注意事项是什么?

时间:2013-06-12 21:06:18

标签: ios objective-c global-variables

我正在查看的SDK的演示应用程序具有应用程序委托和根视图控制器的全局变量。

我以前没见过,但优点很明显。 任何重新输入的快捷方式

AViewController* rootVC = [[UIApplication sharedApplication]delegate] window] rootViewController];

只是为了获得根视图控制器似乎是一个巨大的帮助。

但是,当然,任何看似巨大的优势总会带来同样的劣势。那么为什么我不应该总是在AppDelegate.m中为我的app委托和根视图控制器创建一个全局变量?是浪费资源还是危及安全?

2 个答案:

答案 0 :(得分:1)

如果经常通过共享应用程序委托访问根视图控制器,那么您可能会将全局变量添加为快捷方式。这基本上是一回事。它不会浪费资源或危及安全。

那就是说,我认为这会鼓励糟糕的设计。而不是访问全局变量,为什么不将引用仅传递给需要它们的控制器?或者也许可以解决控制器与NSNotifications,委托或阻止回调的问题?

这取决于您的应用需求。尝试在过度工程和良好的分离设计之间划清界线。

答案 1 :(得分:1)

这是不好的做法,因为它导致无法维护或难以维护的代码。

  • 竞争条件很容易实现,因为应用程序的两个部分试图修改相同的全局变量,你必须确保自己按照一定的顺序完成。
  • 随着值的改变,程序逻辑有时会令人困惑 在你的下面是应用程序的不同部分。你一直 必须考虑如何改变某个值会影响 使用该变量的所有其他内容以及它们可能处于什么状态 在。

  • 您仍然需要传递对全局对象的引用或
    引用父控制器来获取引用。这让你的 代码非常依赖,而不像设计的代码那样健壮 单独传递值。

这些观点非常普遍,但至少应该说明为什么大多数人宁愿避开全球范围,而是采用分离设计。