我有 2 个继承自“MyClass”的子类,每个子类都应该是一个单例。
当我没有任何其他类继承时,我使用此模式获取静态实例:
+ (MyClass *)getInstance
{
static dispatch_once_t once;
static MyClass *instance;
dispatch_once(&once, ^{
instance = [[MyClass alloc] init];
});
return instance;
}
这很好用。现在,如果我添加两个新的子类,FirstClass 和 SecondClass,它们都继承自 MyClass,我如何确保获得各自的 ChildClass?
dispatch_once(&once, ^{
// No longer referencing 'MyClass' and instead the correct instance type
instance = [[[self class] alloc] init];
});
FirstClass *firstClass = [FirstClass getInstance]; // should be of FirstClass type
SecondClass *secondClass = [SecondClass getInstance]; // should be of SecondClass type
执行上述操作意味着我总是能取回我将 1st 实例化为我的第二类类型的任何类:
first: <FirstClass: 0x884b720>
second: <FirstClass: 0x884b720>
// Note that the address and type as identical for both.
在不向每个子类添加方法的情况下创建相应的子类单例的最佳方法是getInstance
什么?