2010-06-08 137 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 」。