2011-09-13 173 views
0

可能重复:
What's the correct method to subclass a singleton class in Objective -C?Singleton设计模式

@implementation Singleton 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

+(Singleton *)singleton 
{ 
    static Singleton * singleton; 
    if (singleton == nil) 
    { 
     singleton =[[Singleton alloc]init]; 
    } 
    return singleton; 
} 
@end 

现在到目前为止good.Actually,初始化部分应该是私有的。但我稍后会担心的。

现在,假设我想要继承单例类。我应该如何修改它?

也让我们来看看这里的代码:

+(Singleton *)singleton 
{ 
    static Singleton * singleton; 
    if (singleton == nil) 
    { 
     singleton =[[Singleton alloc]init]; 
    } 
    return singleton; 
} 

我应该修改,以

+(self *)singleton 
{ 
    static self * singleton; 
    if (singleton == nil) 
    { 
     singleton =[[self alloc]init]; 
    } 
    return singleton; 
} 

让单身方法总是返回子类而不是父类

嗯,我得到编译错误

现在我知道一个子类是一个“父” 。所以子类化单例是没有意义的。

如果我不需要严格的单身人士,那么呢?

我想

@interface CLASSA:单 @interface CLASSB:singelton

所有具有引用ClassA和ClassB的单一实例的单方法?

+2

所以是你的问题(因此标题)更好地表述为“如何创建可被继承单身?”或者“如何继承一个单身人士?”? – jball

+0

如果你继承它,它不再是一个单身......一个孩子IS-A的父母。 – duffymo

+1

可能的重复[什么是在Objective-C中继承单例类的正确方法](http://stackoverflow.com/questions/3394033/whats-the-correct-method-to-subclass-a-singleton-class -in-目标c)。另外:http://stackoverflow.com/questions/1605083/how-do-i-make-other-classes-derive-from-a-singleton-class/1605127#1605127 –

回答

2

正如duffymo在他的评论中提到,对一个单身人物进行分类是没有意义的。让我试着解释一下。

假设您制作了两个不同的子类,它们都从您的单例基类继承而来。 当你实例化每个实例时,只有第一个实际上会创建一个实例(因为这是一个单例)。第二个子类实例不会被实例化。 但是,子类中添加的功能将在每个单独的子类中实例化。这是越来越乱,你可能会看到:-)

希望这有助于...

问候

+0

是的,正如Georg Fritzche在他的评论中指出的那样以上,副本有一个相当类似的解释。 – KlausCPH