Множество классов UIKit
можно подклассифицировать, но в документации спрашивается, что определенные методы, если они переопределены, должны быть уверены, что все еще звонят до super
. Например:
-[UIViewController viewWillAppear:]
-[UITableViewCell didTransitionToState:]
<every method UIPercentDrivenInteractiveTransition declares>
Почему Apple решила не добавлять NS_REQUIRES_SUPER
в объявления этих методов, так как они действительно требуют супер? Моя первая мысль была обратной совместимостью с более ранними версиями clang, но даже это не проблема, я думаю, после прочтения следующей отрывки документации clang:
Обратите внимание, что на OS X и iOS, что Foundation Framework предоставляет удобный макрос
NS_REQUIRES_SUPER
, который обеспечивает синтаксический сахар для этого Атрибут:
- (void)foo NS_REQUIRES_SUPER;
Этот макрос условно определен в зависимости от поддержки компилятора для этот атрибут. Если компилятор не поддерживает атрибут, макрос расширяется до нуля.