2011-11-04 53 views
1

在objective-c中,如果我有一個諸如「Foo」的類,並且具有該類的「Foo(bar)」的類別,但不實現在該類別中聲明的所有方法,在定義它們之前,我是否必須在一個子類中重新聲明它們?我的書說是(不知道這是一個錯誤,還是已經改變),我不明白爲什麼會這樣。Objective-C 2.0和Categories

基本上類別如何適用於子類?

回答

1

類別與類層次結構正交。他們適用於他們定義的地方。在運行時,類別方法被添加到類的方法表中。子類可以像使用常規方法一樣使用它們。

一定要(重新)讀this chapter of Objective-C Programming Language關於這個問題。

如果要在子類中重寫類別方法,可以通過在類接口中聲明它,或者通過聲明子類的類別。

希望它有幫助。

1

您不需要重新聲明該方法,但是如果要在內部調用它,則必須能夠「看見」聲明。 (即在您的子類.m中的#import 'Foo+bar.h')。

但是,聲明一個方法並不是一個好主意,但不能實現它。如果調用-[Foo someDeclaredButNotImplementdMethod],您的應用程序將崩潰。至少提供一個空的實現(例如- (void)someDeclaredButNotImplementdMethod {})。