Objective-C 2.0和类别

时间:2011-11-04 06:29:18

标签: objective-c categories

在objective-c中如果我有一个类如“Foo”,并且有一个类“Foo(bar)”,但是没有实现该类别中声明的所有方法,我是否必须重新声明它们在我定义它们之前的子类中?我的书说是(不确定这是错误,还是已经改变),我不明白为什么会这样。

基本上类别如何应用于子类?

2 个答案:

答案 0 :(得分:1)

类别与类层次结构正交。它们适用于定义它们的类。在运行时,类别方法将添加到类的方法表中。子类可以像使用常规方法一样使用它们。

请务必(重新)阅读有关该主题的this chapter of Objective-C Programming Language

如果要覆盖子类中的类别方法,可以通过在类接口中声明它,或者通过声明子类的类别来实现。

希望它有所帮助。

答案 1 :(得分:1)

您无需重新声明该方法,但如果您在内部调用该声明,则必须能够“看到”该声明。 (即子类#import 'Foo+bar.h'中的.m)。

然而,声明一个方法但不实现它并不是一个好主意。如果调用-[Foo someDeclaredButNotImplementdMethod],您的应用程序将崩溃。至少提供一个空的实现(例如- (void)someDeclaredButNotImplementdMethod {})。