У нас есть одноэлементный класс в одной из наших статических библиотек. Это синглтон, потому что мы хотим быть в состоянии "помнить" его состояние во все времена. По сути, это синглтон управления пользователями.
Он имеет свойство User *user
и имеет такие методы, как - (void)authenticateUser
.
Мы хотим передать это клиенту, который захочет создать свой собственный метод - (void)authenticateUser
. Для этого я предположил, что они расширят класс UserManager
и просто переопределяют этот метод.
Однако, поскольку это singleton, он имеет методы типа: - (id)sharedInstance
и пользовательский метод alloc
. Все они выглядят так:
static UserManager *_sharedInstance = nil;
+ (id)sharedInstance {
@synchronized([UserManager class]) {
if(!_sharedInstance){
id temp = [[self alloc] init];
[temp class];
}
return _sharedInstance;
}
return nil;
}
+ (id)alloc {
@synchronized([UserManager class]) {
NSAssert(_sharedInstance == nil, @"Attempted to allocate a second instance of a singleton");
_sharedInstance = [super alloc];
return _sharedInstance;
}
return nil;
}
Итак, учитывая это, возможно ли подкласс и расширить этот класс UserManager
? Могу ли я создать ChildUserManager
, который переопределяет функцию? Или мне придется переписать эти одноэлементные методы для работы с "новым" дочерним классом?
Есть ли способ изменить эти методы, чтобы третьи стороны могли легко расширить этот класс?
Спасибо