我使用此代码创建单独的单例子类:
+(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;
如果单独使用它们,它们可以完美地工作,并按预期启动它们的类。但是,如果一起使用,它们都会生成第一个单例的类。
我怎么能改变这段代码,以便子类都是他们自己的单身人士?
答案 0 :(得分:2)
看起来你复杂的构造并没有把dispatch_once混淆了一点 根据要求(毕竟这是dispatch_once的用途),sharedManager只被分配一次。
答案 1 :(得分:1)
您需要创建多个单身人士。更改类工厂方法以测试类,如果基类创建/返回一个对象,并且子类另一个。你需要两次派遣一次对象(在iPad上输入,以后可以做真实的代码)。在更一般的意义上,您可以使用可变字典来保存调度对象和单例,从而通过获取类的NSString名称并将其用作键来支持几乎无限数量的子类。