Подкласс Objective C, который переопределяет метод в суперклассе - PullRequest
15 голосов
/ 21 апреля 2009

В Objective C, если вы что-то делаете подклассом и планируете переопределить метод в суперклассе, должны ли вы повторно объявить метод суперкласса в своем подклассе @interface?

Например, если вы создаете подкласс UIViewController (например, MyViewController) и планируете переопределить «viewDidLoad», если вы включите этот метод в объявление MyViewController @interface или просто внедрите его в MyViewController.m?

В примерах, с которыми я сталкивался, я видел, что это делалось в обоих направлениях (повторное объявление метода в интерфейсе вашего подкласса или повторное объявление метода). Может не быть никакой функциональной разницы, но какова лучшая практика?

Ответы [ 2 ]

26 голосов
/ 21 апреля 2009

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

Что касается , когда помещает его в публичный заголовок, это довольно субъективно и, вероятно, зависит от стиля кодирования, используемого вами / вашей командой. Обычно я переименовываю метод в общедоступном заголовке только в том случае, если я планирую радикально изменить действия метода или если я не планирую вызывать версию метода суперкласса.

5 голосов
/ 21 апреля 2009

Люди часто используют заголовок в качестве документации для класса (и такие инструменты, как AutoDoc, поддерживают это). Очевидно, что если вы следуете этому соглашению, единственный разумный выбор - включить переопределенные методы, чтобы вы могли объяснить, что вы с ними сделали. В противном случае ваши документы для класса либо будут неполными, либо разбросаны по четырем уголкам земли.

Но если мы просто копируем декларацию, я лично не люблю переопределять методы. Это не DRY , и это излишне раздувает ваш заголовок. Чем меньше кода, тем лучше код.

...