【问题标题】:Objective-C 2.0 and CategoriesObjective-C 2.0 和类别
【发布时间】:2011-11-04 06:29:17
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c categories


    【解决方案1】:

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

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

    如果你想在子类中重写一个类别方法,你可以通过在类接口中声明它,或者为子类声明一个类别。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多