@mal4i6ka
iOS developer

Сабклассы и методы с одинаковым названием. Как быть?

Задача:
Есть класс ViewA и отнаследованный от него ViewB с 2-мя designated initializer'ми каждый. У обоих есть метод configure, вызываемый из каждого initializer'а:

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self configure];
    }
    return self;
}
//...
- (void)configure {
    // Create some subviews etc
}


Суть проблемы:
  • Если мы вызываем -configure из init'ов ViewA и ViewB, то в init'е ViewA configure вызовется ViewB'шный. Вызов [super configure] внутри -configure при этом не спасает (-configure ViewA вызовется несколько раз).
  • Проверки на -isMemberOfClass при вызове -configure из init'ов работают, но добавляют кучу лишнего кода
  • Проверки на -isMemberOfClass в -configure не работают совсем.
  • При этом в нашем приложении мы хотим использовать как VIewB, так и ViewA, поэтому не вызывать -configure из init'а ViewA не вариант.

Конечно, есть рабочее и простое решение — вызывать -configure вручную после создания объекта:
ViewA *view = [[ViewA alloc] initWithFrame:someFrame];
[view configure];

Но мне такой подход не кажется правильным. И у меня есть чувство, что я что-то упускаю.
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы