我如何找到一个类继承自一个特定的类从我的类列表? [英] How can I find a class which inherit from a particular class from my Class list?

查看:81
本文介绍了我如何找到一个类继承自一个特定的类从我的类列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到我的应用程序的所有类的列表。

I get the list of all classes of my application.

我想从我的列表中找到继承自MySpecificWrapperClass的每个类。

I want to find each Class from my list which inherits from MySpecificWrapperClass.

int numClasses = objc_getClassList(NULL, 0);
Class *classes = malloc(sizeof(Class) * numClasses);
objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
    Class class = classes[i];
    if( isThisClassInheritsFrom(class,MySpecificWrapperClass )){
       MySpecificWrapperClass o = [[class alloc]init];
       ...
    }
} 
free(classes); 

剂量有人知道如何做?
感谢帮助。
Fred

Dose somebody know how to do that? Thank for help. Fred

推荐答案

可能有更好的解决方案,但强力应该做。 class_getSuperclass 返回给定对象的超类的对象。当你到达根类,它返回 Nil

There may be a better solution, but brute force should do it. class_getSuperclass returns the Class object for a given Class object's superclass. When you get to the root class, it returns Nil.

for (int i = 0; i < numClasses; i++) {
    Class class = classes[i];
    Class superclass = class_getSuperclass(class);
    while( superclass != Nil ){
        if( superclass == MySpecificWrapperClass ){
           // Got one!
           break;
        }
        superclass = class_getSuperclass(superclass);
    };
}

这是假设您要检查 >对于给定类的层次结构,即,你希望每个类都有你的类在其祖先的任何地方。如果你只关心直接子类,显然,你只需要调用 class_getSuperclass 一次。

This is assuming that you want to check the entire hierarchy for a given class, i.e., you want every class that has your class anywhere in its ancestors. If you only care about direct subclasses, obviously, you only need to call class_getSuperclass once.

这篇关于我如何找到一个类继承自一个特定的类从我的类列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆