Вопрос

Мое приложение для iPhone имеет абстрактный класс WorksView. Это подкласс UIView. WorkingView будет в свою очередь иметь кучу бетонных подклассов. Два из них будут упростить просмотр и умножение.

Я пытаюсь написать метод, который создает новые экземпляры WorkeView. Этот метод должен иметь режим пропущенным и возвращать экземпляр соответствующего бетонного подкласса. За ответ на этот вопрос, Это то, что у меня сейчас:

+ (id)newWorkingViewWithFrame:(CGRect)frame mode: (modeEnum) mode {
    WorkingView *ret;
    switch (mode) {
        case simplifyMode:
            ret = [[SimplifyView alloc]initWithFrame: frame];
            break;
        case multiplyMode:
            ret = [[MultiplyView alloc]initWithFrame: frame];
            break;
        // additional cases here
        default:
            return nil;
    }
    // more initialization here
    return ret;
}

Все идет нормально. Но вот проблема. В методе init SimplifyView мне нужно запустить объект через метод init iniview. Призыв [Super initwithframe: кадр] Получает меня только на WorkingView, не вплоть до UIView. Я полагаю, что я мог бы создать инициативный метку: метод WorkeView, что в свою очередь вызывает initWithframe UIView INITWITHFRAME: - но это чувствует себя взлома.

Какой подходящий способ справиться с этим?

Это было полезно?

Решение

Если вы звоните [super initWithFrame:frame] Из вашего подкласса временем выполнения поднимается на иерархию наследования, которую ищут класс, который реализует этот метод, начиная с супер. Если Super не реализует initWithFrame:, время выполнения продолжит восхождение, пока он в конечном итоге не найдет и не вызывает реализацию по умолчанию в UIView.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top