我正在查看的SDK的演示应用程序具有应用程序委托和根视图控制器的全局变量。
我以前没见过,但优点很明显。 任何重新输入的快捷方式
AViewController* rootVC = [[UIApplication sharedApplication]delegate] window] rootViewController];
只是为了获得根视图控制器似乎是一个巨大的帮助。
但是,当然,任何看似巨大的优势总会带来同样的劣势。那么为什么我不应该总是在AppDelegate.m中为我的app委托和根视图控制器创建一个全局变量?是浪费资源还是危及安全?
答案 0 :(得分:1)
如果经常通过共享应用程序委托访问根视图控制器,那么您可能会将全局变量添加为快捷方式。这基本上是一回事。它不会浪费资源或危及安全。
那就是说,我认为这会鼓励糟糕的设计。而不是访问全局变量,为什么不将引用仅传递给需要它们的控制器?或者也许可以解决控制器与NSNotifications,委托或阻止回调的问题?
这取决于您的应用需求。尝试在过度工程和良好的分离设计之间划清界线。
答案 1 :(得分:1)
这是不好的做法,因为它导致无法维护或难以维护的代码。
随着值的改变,程序逻辑有时会令人困惑 在你的下面是应用程序的不同部分。你一直 必须考虑如何改变某个值会影响 使用该变量的所有其他内容以及它们可能处于什么状态 在。
您仍然需要传递对全局对象的引用或
引用父控制器来获取引用。这让你的
代码非常依赖,而不像设计的代码那样健壮
单独传递值。
这些观点非常普遍,但至少应该说明为什么大多数人宁愿避开全球范围,而是采用分离设计。