2010-06-26 38 views
6

我有2個類,Parent和Child,Parent有一個名爲func的類方法。 現在我想在func方法中獲取Class實例來區分哪個類是調用者。Objective-c:如何在類方法中獲得Class實例

@interface Parent : NSObject 
+ (void)func; 
@end 

@implementation Parent 

+ (void)func { 
    Class *class = howToGetClass(); 
    NSLog(@"%@ call func", class); 
} 

@end 

@interface Child : Parent 
@end 

int main() { 
    [Child func]; // call func from Child 
} 

有什麼辦法在類方法中獲取類實例(或類名)?

回答

16

如果你只是想記錄它/把它作爲一個類,你只需要self。而已。因此,像

+ (void)func { 
    Class class = self; 
    NSLog(@"%@ call func", class); 
} 

+ (void)func { 
    NSLog(@"%@ call func", self); 
} 

另外,如果你想獲得的名稱作爲一個NSString,NSStringFromClass(個體經營)有你覆蓋。 (作爲char *,class_getName(self)是你在找的東西)

+0

我想添加一些實用工具方法(如django中的all())到NSManagedObject。所以我需要區分來電者。 使用'自我'是我想知道的!謝謝! – taichino 2010-06-26 20:07:21

+0

這是不是我誰投票,但我只是檢查,並在一個類的方法 自== [自我班] 剛剛看到這已在另一個評論中說過,但澄清,他們是相同的,至少在類方法中。 所以你是對的,我也是如此 – 2010-06-26 20:32:40

+1

Class * class = self;是錯的。去掉 *。正確的語法是:Class class = self; – Lukasz 2012-09-21 11:34:18

3

爲了得到當前類的對象,你應該能夠做到:

[self class]; 

由於自將指類的實例,因爲它是一個類的方法。 Class是NSObject中定義的一個方法,它返回對象的類。

編輯,以避免混淆...

+0

爲了澄清,這將返回類的Class對象,而不僅僅是* name *,正如答案所暗示的那樣。 – 2010-06-26 18:24:04

+3

實際上,[self class]和class中的self一樣。文檔(好的GNUStep文檔)實際上說它只是用'return self'來實現。它只存在於傳遞類作爲參數,請參閱http://stackoverflow.com/questions/3107213/why-do-we-have-to-do-myclass-class-in-objective-c – 2010-06-26 18:43:56

+1

非常感謝!我不知道'自我'可以在課堂上使用! – taichino 2010-06-26 18:55:23

相關問題