Objective-C中全局变量的缺陷和警告是什么?



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

我以前没有见过这个,但是优点是显而易见的。关于重新输入

的快捷方式
AViewController* rootVC = [[UIApplication sharedApplication]delegate] window] rootViewController];

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

当然,任何看似巨大的优势总是伴随着同样的劣势。为什么我不总是在AppDelegate中创建一个全局变量呢。M代表我的app委托和根视图控制器?它是否浪费资源或危及安全性?

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

  • 竞争条件真的很容易出现,因为应用程序的两个部分试图修改同一个全局变量,你必须确保自己的事情是按照一定的顺序完成的。
  • 当值改变时,程序逻辑有时会令人困惑通过应用程序的不同部分。你总是必须考虑你改变某个值会产生什么影响所有使用这个变量的东西以及它们可能的状态。

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

这些点是非常一般化的,但至少应该给你一个指示,为什么大多数人更喜欢避免全局作用域,而不是使用解耦设计。

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

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

这取决于你的应用程序的需要。试着在过度工程和良好的解耦设计之间走一条线。

最新更新