Объектный C-подкласс, который переопределяет метод в суперклассе
В Objective C, если вы подклассифицируете что-то и планируете переопределить метод над суперклассами, следует ли повторно объявить метод суперкласса в вашем подклассе @interface?
Например, если вы подклассифицируете UIViewController (например, MyViewController), и вы планируете переопределить "viewDidLoad", если вы включите этот метод в объявление MyViewController @interface или просто внесите его в MyViewController.m?
В примерах, которые я встретил, я видел, как это делается в обоих направлениях (повторное объявление метода в вашем интерфейсе подкласса или повторное объявление метода). Там может не быть функциональной разницы, но какова наилучшая практика?
Ответы
Ответ 1
Я часто объявляю методы, которые планирую переопределить либо в публичном заголовке, либо, по крайней мере, в частной категории. Преимущество этого в том, что вы получите предупреждение о неполном определении класса, если вы забудете фактически переопределить метод... который время от времени пригодится.
Что касается , когда размещать его в общедоступном заголовке, это довольно субъективно и, вероятно, до вас/ваших стилей кодирования команды. Обычно я только переопределяю метод в публичном заголовке, если планирую радикально изменить то, что будет делать этот метод, или если я планирую не ссылаться на версию суперкласса метода.
Ответ 2
Люди часто используют заголовок как документацию для класса (и такие инструменты, как AutoDoc, поддерживают это). Очевидно, что если вы следуете этому соглашению, единственным разумным выбором является включение переопределенных методов, чтобы вы могли объяснить, что вы сделали с ними. В противном случае ваши документы для класса либо неполные, либо рассеяны в четырех углах земли.
Но если мы просто скопируем декларацию, мне лично не нравится переопределять методы. Это не DRY, и он излишне раздувает ваш заголовок. Меньше кода - лучший код.