有没有一种用Objective-C创建单例模式的方法,使客户端代码可以获取其任何子类的共享实例?
我尝试过:
@interface Base : NSObject {}
+(id)instance;
@end
@implementation Base
static id _instance;
+(id)instance {
if (!_instance) {
_instance = [[self alloc] init];
}
return _instance;
}
@end
但是,调用任何子类的[AmazingThing instance]
都只会返回通过此机制创建的第一个实例,无论_instance
的类型是什么。有没有简单的解决方法?
编辑
我意识到(在回复已删除的答案时)我可以通过将实现更改为以下方式来实现我的目标:
static NSMutableDictionary *_instances;
+(id)instance {
if (!_instances) {
_instances = [[NSMutableDictionary alloc] init];
}
id instance = [_instances objectForKey:self];
if (!instance) {
instance = [[self alloc] init];
[_instances setObject:instance forKey:self];
}
return instance;
}
现在它按预期工作。但我很想知道是否有更好的方法来做到这一点。