在我基于文档的应用程序中,我有一个AppController,用于处理打开Prefs,About面板等。我也有一个单例类;因为它基本上是一个传递的全局对象,谁应该拥有它?使用它的对象还是我的AppController?我读到的一些文章说你应该有一个“中心”位置 - 比如一个委托,其他人说这是糟糕的设计,只有一个使用X类的对象应该拥有X类。你有什么看法?
答案 0 :(得分:2)
没有真正拥有单例的因为它存储在这样的静态变量中:
static Globals *sharedGlobals = nil;
@implementation Globals
+ (Globals *) sharedGlobals {
if (!sharedGlobals) sharedGlobals = [[Globals alloc] init];
return sharedGlobals;
}
第一次调用sharedGlobals
方法时,单例将由称为它的任何类创建。谁先调用它并不重要。
答案 1 :(得分:0)
我认为单例对象在第一次分配后才存在于内存中,它不应该由任何对象拥有。
答案 2 :(得分:-1)
您不应该使用单例作为定义全局对象的方法,单例模式旨在提供一种方法来确保一个上下文中的唯一实例。但问题是如果你不使用依赖注入框架并通过java实现它,用于实现模式的静态方法允许所有应用程序类自由访问singlenton。所以它是一种开始销毁你自己的模块/应用程序设计的方法(如果你没有正确控制它)。
在你决定使用或不使用单身人士模式(反对和亲)之前,先看看这些帖子: