在objective-c中如果我有一个类如“Foo”,并且有一个类“Foo(bar)”,但是没有实现该类别中声明的所有方法,我是否必须重新声明它们在我定义它们之前的子类中?我的书说是(不确定这是错误,还是已经改变),我不明白为什么会这样。
基本上类别如何应用于子类?
答案 0 :(得分:1)
类别与类层次结构正交。它们适用于定义它们的类。在运行时,类别方法将添加到类的方法表中。子类可以像使用常规方法一样使用它们。
请务必(重新)阅读有关该主题的this chapter of Objective-C Programming Language。
如果要覆盖子类中的类别方法,可以通过在类接口中声明它,或者通过声明子类的类别来实现。
希望它有所帮助。
答案 1 :(得分:1)
您无需重新声明该方法,但如果您在内部调用该声明,则必须能够“看到”该声明。 (即子类#import 'Foo+bar.h'
中的.m
)。
然而,声明一个方法但不实现它并不是一个好主意。如果调用-[Foo someDeclaredButNotImplementdMethod]
,您的应用程序将崩溃。至少提供一个空的实现(例如- (void)someDeclaredButNotImplementdMethod {}
)。