为啥使用全局变量类(单例)是不好的做法? [复制]
Posted
技术标签:
【中文标题】为啥使用全局变量类(单例)是不好的做法? [复制]【英文标题】:Why is using a Global Variables class (singleton) bad practise? [duplicate]为什么使用全局变量类(单例)是不好的做法? [复制] 【发布时间】:2013-08-26 23:07:58 【问题描述】:我工作的公司有一个单例的 HUGE 类 (Globals.m)。它主要存储一堆应该进入 NSUserDefaults 的 BOOL,但也有指向属于各种视图控制器的视频播放器之类的指针。我对 ios 开发相当陌生(而且我是一个低级的实习生),但我知道我的直觉是代码闻到了天堂的味道。如何解释为什么使用单例存储所有变量不好?
编辑:我并不是说单身不好,我只是说在这种情况下。基本上,应用程序中的每个重要变量都存储在这个实例中。
【问题讨论】:
模式只是模式...真正糟糕的是仅仅因为您认为它是就盲目地告诉它是坏的...单例也不错,但您当然可以使用/创建糟糕的单身......这取决于你如何设计/使用它们...... 单例它是一种模式......不要正确使用它很糟糕,我闻到有人认为使用单例,而实际上它不是单例 谢谢@JoshCaswell,我之前看到过,但我并没有完全理解他的所有观点。抱歉重复了! 【参考方案1】:UIKit 中的很多对象都是单例的。 UIApplication 对象是一个单例。 NSUserDefaults 有 standardUserDefaults
单例。 UIDevice currentDevice
返回一个单例。
仅仅因为它是单例并不意味着它很糟糕。糟糕的是,当您开始将其他类中的功能绑定到您的单例对象时,它已经根深蒂固,以至于您无法轻易更改单例对象或受影响的对象。
我使用单例来存储我的非 CoreData 对象结构。我还定义了一些帮助方法来获取库目录、编码数据和密钥归档。因此,我可以在任何需要的地方引用主数组对象,或者轻松访问原本只是复制和粘贴的方法。
【讨论】:
所以如果他们使用它的只是变量,那么没有什么坏处吗? 我想说,如果您在 View Controller 代码中直接访问和修改单例的对象,而不是将这些对象分配为 View Controller 类的属性,那就不好了。即-viewDidLoad [[[Singleton shared] array]addObject:newObject];
会很糟糕,而不是在视图控制器中为数组设置属性并在那里修改它。【参考方案2】:
Globals.m
听起来不像是单例,如果是的话,它看起来只是用于配置目的?然后一个充满#defines
或extern
的文件会做同样的事情,我猜。如果没有更多详细信息,很难知道您在搜索什么。
【讨论】:
它被设置为单例,并明确有一个注释将其称为单例。它被积极用于存储必须访问其他类的任何变量,而不仅仅是用于配置。除了 UI,实际上不要相互引用。一切都是通过 NSNotificationCenter 和这个 Globals 实例完成的。我很可能只是草草得出结论,这是一种不好的做法,就像我说的那样,我不是很有经验。以上是关于为啥使用全局变量类(单例)是不好的做法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章