Во-первых, да, метод действительно должен существовать для проверки, чтобы преуспеть в контексте, который вы описываете. respondsToSelector:
вернет NO
, если метод не реализован.
Что еще более важно, я думаю, вы имеете в виду чистую виртуальную функцию бедного человека в Objective-C. Все методы экземпляра являются «виртуальными» в Objective-C; поскольку поиск метода выполняется во время выполнения, реализация подкласса всегда будет использоваться даже из указателя типа суперкласса. В Objective-C нет такого понятия, как чистый виртуальный базовый класс. Вы часто можете достичь того, чего хотите, либо используя @protocol
, чтобы определить API, либо использовать базовый класс, который обеспечивает реализацию, которая создает в качестве своего тела NSNotImplementedException
. Очевидно, что подклассы должны переопределять реализацию, делая ее фактически чистой виртуальной.
Возможно, вы хотите отредактировать первую строку. Технически говоря, методы не должны существовать. В конце концов 'отвечаетSoSelector:' единственная цель - определить, существует ли метод или нет. Он отлично работает с несуществующими методами, он просто возвращает нет. Я думаю, что вы отвечаете, имеет смысл в предполагаемом контексте родителя, но для будущих читателей вы, возможно, захотите сделать различие явным. – TechZen
@TechZen Хорошая точка. Ред. –