关于iOS:为什么使用全局变量类(singleton)是不好的实践?

Why is using a Global Variables class (singleton) bad practise?

本问题已经有最佳答案,请猛点这里访问。

我为之工作的公司有一个很大的班级(globals.m),就是单身。它主要存储一些应该进入nsuserdefaults的bools,但是也有指向类似视频播放器的指针,这些播放器属于不同的视图控制器。我对iOS开发还比较陌生(我是一个低等的实习生),但我的直觉告诉我,代码闻起来就像天堂。我如何解释为什么使用单例存储所有变量是不好的?

编辑:我不是说单身是坏的,我只是说在这种情况下。基本上,应用程序中的每个重要变量都存储在这个实例中。


uikit中的很多对象都是单件的。uiapplication对象是一个singleton。nsuserdefaults具有standardUserDefaults单例。uidevice currentDevice返回一个单例。

仅仅因为它是单身并不意味着它是坏的。不好的是,当您开始将其他类中的功能与单例对象联系起来时,它是如此根深蒂固,以至于您不能轻易地更改单例对象或受影响的对象。

我使用一个singleton来存储我的非coredata对象结构。我还定义了一些用于获取库目录、编码数据和键控归档的辅助方法。所以我可以在任何需要的地方引用一个主数组对象,或者很容易地访问那些原本只是复制和粘贴的方法。


Globals.m听起来不是单例的,如果是单例的话,它看起来只是用于配置目的?我想,一个装满了#definesextern的文件也能做到这一点。如果没有更多的细节,很难知道你在搜索什么。