2010-06-08 55 views
3

比方说,我有以下标题:OBJ-C - 从一个类层次结构得到一个类名

@interface SuperClass : NSObject 

@interface SubClass : SuperClass 

我做alloc'ing的类的实例:

SubClass *sc = [[SubClass alloc] init]; 

在我的SuperClass.m中:

- (id) init 
{ 
self = [super init]; 
if (self != nil) 
{ 
    NSString *cString = NSStringFromClass([self class]); 
} 
return self; 
} 

简单吧?我的问题是:我如何获得cString返回SuperClass类,而不是SubClass类? 由于子类被分配/初始化,这是不可能的吗?

谢谢!

+0

有各种各样的方法来完成这一点,最简单的是卡尔的建议,如果你总是想要相同的字符串,只需使用静态字符串。如果你想在这里解决一些更深层次的问题,可以让我们参与进来,这样我们可以为如何去做提供更好的建议。 – Chuck 2010-06-08 23:15:07

+1

同意查克。我想不出有什么理由需要知道supeclass的名字。也许有更好的办法来处理你想要的东西。 – JeremyP 2010-06-09 07:32:28

回答

0

如果你总是希望相同的字符串出来,为什么不干脆:

NSString *classString = @"SuperClass"; 
+0

我可能最终会诉诸此,但SubClass可能会进一步子类(即。SubSubClass)。如果可能的话,如果我可以为每个超类使用'[self class]',我宁愿不让每个子类都硬编码。 – mmilo 2010-06-08 23:15:19

5

如果你总是希望得到超级类,

- (id) init 
{ 
    self = [super init]; 
    if (self) 
    { 
     NSString *cString = NSStringFromClass([self superclass]); 
    } 
    return self; 
} 

如果alloc + init一个子类,则cString将包含“ SuperClass ”,但是,如果您的alloc + init为SuperClass,则cString将包含“ NSObject ”。