单身的子类不能一起工作

时间:2013-05-29 11:07:21

标签: iphone ios objective-c class singleton

我使用此代码创建单独的单例子类:

+(id)sharedManager {

    Class class = [self class];

    static SPPanelManager *sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[class alloc] init];
    });

    return sharedManager;
}

然后在每个子类的.h中,有这个,以类的名称作为返回值:

+(SPWeatherManager *)sharedManager;

如果单独使用它们,它们可以完美地工作,并按预期启动它们的类。但是,如果一起使用,它们都会生成第一个单例的类。

我怎么能改变这段代码,以便子类都是他们自己的单身人士?

2 个答案:

答案 0 :(得分:2)

看起来你复杂的构造并没有把dispatch_once混淆了一点 根据要求(毕竟这是dispatch_once的用途),sharedManager只被分配一次。

答案 1 :(得分:1)

您需要创建多个单身人士。更改类工厂方法以测试类,如果基类创建/返回一个对象,并且子类另一个。你需要两次派遣一次对象(在iPad上输入,以后可以做真实的代码)。在更一般的意义上,您可以使用可变字典来保存调度对象和单例,从而通过获取类的NSString名称并将其用作键来支持几乎无限数量的子类。