Objective-C: принудительный вызов super при переопределении определенных методов super в подклассе
Мы все знаем, как легко переопределить метод в подклассе и забыть вызвать [super method]
,
В моем случае у меня есть:
ClassA (framework class, can not be modified)
ClassB (my own class)
ClassC (user's subclass)
ClassA уже предоставляет метод doSomething
, Ради того же API я должен переопределить doSomething
и потребовать, чтобы ClassC вызвал [super doSomething], если пользователь решит реализовать свою собственную версию doSomething
,
Так как эта структура также будет использоваться новичками, я хотел знать, есть ли способы определить, что метод не вызвал свою супер версию, или где, возможно, даже компилятор выдает предупреждение / ошибку, когда пользователь реализует метод, но не делает звони супер.
Я знаю, что это противоречит закону. Это просто для предотвращения ошибки пользователя, потому что отказ от вызова super вызовет проблемы, которые не будут легко прикреплены к отсутствующему вызову super.
Я также знаю, что альтернативой может быть предоставление пользователю другого API (т.е. doCustomSomething
) все же я все еще не мог помешать пользователю просто переопределить оригинал doSomething
(по привычке) и, таким образом, в обход любого doSomething
код добавлен в ClassB. Так что это не будет делать.
Я в основном ищу способы уведомить пользователя о пропущенном [super doSomething], но если есть альтернативные способы действительно обеспечить выполнение doSomething ClassB, когда его суперкласс (ClassA) выполняет doSomething, это тоже будет работать. Я предполагаю, может быть, какой-то непонятный метод swizzling мог бы сработать (опять же, только для того, чтобы обнаружить и выдать ошибку)?