为什么UIKit方法不使用NS_REQUIRES_SUPER?

rav*_*ron 12 objective-c clang ios

UIKit可以对很多类进行子类化,但是文档要求某些方法(如果被覆盖)必须确保仍然可以调用super.例如:

-[UIViewController viewWillAppear:]
-[UITableViewCell didTransitionToState:]
<every method UIPercentDrivenInteractiveTransition declares>
Run Code Online (Sandbox Code Playgroud)

为什么Apple选择不附加NS_REQUIRES_SUPER这些方法的声明,因为它们确实"需要超级"?我的第一个想法是向后兼容早期版本的clang,但在阅读以下clang文档摘录后,我认为即使这不是问题:

请注意,在OS X和iOS上,Foundation框架提供了一个方便的宏NS_REQUIRES_SUPER,为此属性提供语法糖:

- (void)foo NS_REQUIRES_SUPER;

根据编译器对此属性的支持,有条件地定义此宏.如果编译器不支持该属性,则宏将扩展为空.

Con*_*lon 0

因为它是一个相对较新的注释,人们还没有完成将其应用到(庞大的)api 的工作。