繁体   English   中英

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

[英]What are the pitfalls and caveats of global variables in Objective-C?

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

我以前没见过这个,但优点很明显。 围绕重新输入的任何捷径

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

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

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

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

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

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

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

  • 竞争条件非常容易实现,因为应用程序的两个部分试图修改相同的全局变量,并且您必须确保自己按特定顺序完成。
  • 程序逻辑有时会混淆,因为应用程序的不同部分会在您的下方更改值。 您总是必须考虑如何更改某个值会影响使用该变量的其他所有内容以及它们可能处于什么状态。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM