0

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

我以前没见过这个,但优点是显而易见的。重新输入的任何快捷方式

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

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

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

4

2 回答 2

1

如果您经常通过共享应用程序委托访问您的根视图控制器,那么您可能会添加一个全局变量作为快捷方式。本质上是一样的。它不会浪费资源或损害安全性。

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

这取决于您的应用程序的需求。尝试在过度工程和良好的解耦设计之间找到界限。

于 2013-06-12T21:26:48.613 回答
1

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

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

  • 您仍然必须传递对全局对象的引用或
    引用父控制器来获取引用。这使您的代码非常依赖并且不如设计为独立并传入值的代码那么健壮。

这些观点非常笼统,但至少应该让您了解为什么大多数人更喜欢避免使用全局作用域,而是采用解耦设计。

于 2013-06-12T21:58:41.067 回答