在Objective-C中找出类的所有超类的正确方法?

时间:2014-02-11 07:57:33

标签: objective-c

我是新手,我似乎在这上面遇到了多个错误。 我想要的只是一个for或while循环来打印出某个Class的所有超类。

这是我想要的伪代码:

IDontKnowWhatClass *superClassName;

while (superClassName != nil)
{
    superClassName = [[superClassName class] superclass];
    NSLog(print the name);
}

4 个答案:

答案 0 :(得分:1)

使用NSObject方法名称:

objc_property_t class_getProperty(Class cls, const char *name)

//Returns a property with a given name of a given class.

继续寻找,直到你得到NSObject,因为它是最高级的

使用此方法检查是否相等:

- (BOOL)isEqual:(id)object;

[object isKindOfClass:[SomeClass class]]

Documentation here

这将有效

答案 1 :(得分:1)

您可以在当前类上调用superclass方法,直到它等于Nil(对于根类,即NSObject)。

Class c = [IDontKnowWhatClass class];

while (c)
{
    NSLog(@"%@", NSStringFromClass(c));
    c = [c superclass];
}

答案 2 :(得分:1)

NSString* classString = @"IDontKnowWhatClass";
Class class = NSClassFromString(classString);
while (class != nil){
    NSLog(@"%@", [class description]);
    class = [class superclass];
}

答案 3 :(得分:1)

试试这个

Class superClassName = [self class];

while (superClassName != nil)
{
        superClassName = [superClassName superclass];
        NSLog(@"%@",NSStringFromClass(superClassName));
}

如果你知道一个类本身就像NSString那样,

Class superClassName = [NSString class];

您可以将类名存储为类似

的字符串
NSString *className = NSStringFromClass(superClassName);

如果你想创建一个类的对象,其类名存储在类似

的字符串中
id object = [[NSClassFromString(className) alloc] init];