2010-06-26 37 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

相关问题