Есть ли способ создать шаблон Singleton с объективом-c, который позволит клиентскому коду получить общий экземпляр любого из его подклассов?Objective-c singleton baseclass
Я пробовал:
@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;
}
теперь он работает, как ожидалось. Тем не менее, мне интересно узнать, есть ли лучший способ сделать это.
просто из любопытства, что такое прецедент для этого? – ennuikiller 2010-12-08 01:23:22
@ennuikiller Я создаю систему сущностей/компонентов, и для целей прототипирования я хотел бы иметь синглтон из всех компонентов. – sharvey 2010-12-08 01:38:18
Ваше Редактирование - довольно хорошее решение в моем случае. благодаря! – Adem 2015-11-01 21:16:36