单身设计模式

时间:2011-09-13 15:39:13

标签: objective-c xcode singleton

  

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

@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

现在到目前为止一直很好。实际上,init部分应该是私有的。但是我稍后会担心的。

现在,我想要将单例类子类化。我应该如何修改它?

另外,让我们看看这里的代码:

+(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:singleton @interface classB:singelton

所有人都有一个单例方法,引用classA和classB的单个实例?

1 个答案:

答案 0 :(得分:2)

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

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

希望这会有所帮助......

此致