2011-09-13 211 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