2011-07-27 68 views
4

比方說,我有一個名爲MyBaseClass的Objective-C類和一個名爲MySubclassedClass的子類。Objective-C:子類的調用類方法

的MyBaseClass有兩個類方法:

+ (UIColor *)backgroundColor; 
+ (UIImage *)backgroundImage; 

的的backgroundColor方法調用backgroundImage。如果僅限於MyBaseClass,我backgroundColor方法看起來像

+ (UIColor *)backgroundColor { 
    UIImage *img = [MyBaseClass backgroundImage]; 
    // irrelevant 
    return color; 
} 

但我希望能夠繼承MyBaseClass到MySubclassedClass。 backgroundColor不會更改,並始終調用父母的backgroundImage方法。在這種情況下,每個子類中都會覆蓋backgroundImage

如果1backgroundColor1是一個實例方法,我會簡單地使用

UIImage *img = [[self class] backgroundImage]; 

但是,沒有「自我」當它是一個靜態方法,我可以使用。

是否有一些我可以在Objective-C中完成此操作?

+2

爲什麼你認爲在課堂上沒有自我? – bealex

+2

我用「類方法」替換了「靜態方法」一詞。 Objective-C中的類方法在C++中是'virtual',而不是'static' ......我認爲C++中的術語選擇是不幸的。 – Yuji

回答

12

當您從另一個類方法向類方法發送消息時,self是類。因此,您可以執行以下操作:

UIImage *img = [self backgroundImage]; 
+0

謝謝。沒有意識到自己提到了這個班級。 – Neil

4

您可以在類(靜態)方法中使用self。在這種情況下,self引用類對象。