Objective-C:何时知道您正在滥用全局变量的SIngleton方法

enn*_*ler 2 oop singleton global-variables objective-c

因此,我的客户iphone应用程序已在过去几周内从5个左右的班级推迟到25个以上.有了这么大(对于iphone无论如何)的类结构,我一直在使用Singleton类来访问全局变量.问题是,每当我需要访问我正在处理的类之外的变量时,我可以选择修改代码以传递对变量的引用,或者只是将其抛入单例中.当然,将它放入单例中的代码和工作量要少得多,但是,现在单身人士开始看起来像是一个无关的全局变形.

我的问题是,维护一个具有不相关的全局变量的大型单例对象是多么合适,以及在"非平凡"的iphone应用程序中跨类共享数据的"最佳实践"方式通常是什么?

非常感谢您的建议!

Joh*_*lph 6

我已经在解耦设计的背景下对这个问题进行了详细的分析.我会试着总结一下我的观点:

  1. 如果您的Singleton具有重要的全局状态,请不要使用Singleton.这包括持久存储,如数据库,文件等.
  2. 如果类名称对Singleton Object的依赖性不明显,则应该注入依赖项.将Singleton实例注入类的需要证明了模式的错误使用(参见第1点).
  3. 假设Singleton的生命周期与应用程序的生命周期相同.大多数Singleton实现都使用延迟加载机制来实例化自己.这是微不足道的,它们的生命周期不太可能改变,否则你不应该使用Singleton.