У нас есть одноэлементный класс в одной из наших статических библиотек. Это синглтон, потому что мы хотим быть в состоянии "помнить" его состояние во все времена. По сути, это синглтон управления пользователями.
Он имеет свойство 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, который переопределяет функцию? Или мне придется переписать эти одноэлементные методы для работы с "новым" дочерним классом?
Есть ли способ изменить эти методы, чтобы третьи стороны могли легко расширить этот класс?
Спасибо
