1

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

+(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;

如果单独使用它们,它们会完美运行,并按预期启动它们的类。但是,如果一起使用,它们都将采用生成的第一个单例的类。

我如何更改此代码以使子类都是它们自己的单例?

4

2 回答 2

2

看来您的复杂构造并没有使 dispatch_once 感到困惑。
根据要求(毕竟这就是 dispatch_once 的用途), sharedManager 只分配一次。

于 2013-05-29T12:50:54.947 回答
1

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

于 2013-05-29T11:23:02.243 回答