О методах, переопределяющих метод в суперклассе без реализации - PullRequest
1 голос
/ 13 октября 2011

У меня есть класс с несколькими подклассами.

Они все переопределяют метод класса, но у меня нет конкретной реализации для метода в суперклассе.

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

Причина, по которой я добавляю определения методов в суперкласс, заключается в том, что у меня многоцелевой проект, текущий делегат приложения рассматривается с помощью специального переопределенного метода:

[(GenericDelegate *)[NSApp delegate] myMethod];

спасибо

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

Да, это совершенно нормальная практика. На самом деле, у него есть имя: «Метод шаблона». Вы ищете это в документации Какао.

Вы обнаружите, что Apple также иногда делает это в своем собственном коде. drawRect: метод в UIView - первый, который приходит на ум.

Так что, в любом случае, да, если это соответствует вашим потребностям, я бы пошел и сделал это. Просто убедитесь, что вы продумали, подходит ли, например, протокол к вашим потребностям.

1 голос
/ 13 октября 2011

Есть и другие варианты. Проверьте ответ / обсуждение здесь: Есть ли в Objective-C что-то вроде виртуальных функций C ++?

0 голосов
/ 13 октября 2011

Все методы являются виртуальными в цели c, «чистой» виртуальной (как в C ++) функции не существует, и, следовательно, эквивалентные методы в цели c нуждаются в пустой реализации в суперклассе, просто чтобы заставить замолчать предупреждение компилятора (я нене думаю, что есть другой способ сделать это).Там нет ничего плохого.Эта запись связана с вашим вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...