通过运行时来获取该注册类的所有子类

原创 2015年07月08日 10:33:22

使用该方法需要包含头文件

#import <objc/runtime.h>

//获取该注册类的所有子类
+ (NSArray*)subclassesOfClass:(Class)parentClass
{
    int numClasses = objc_getClassList(NULL, 0);
    Class *classes = (Class*)malloc(sizeof(Class) * numClasses);
    
    numClasses = objc_getClassList(classes, numClasses);
    
    NSMutableArray *result = [NSMutableArray array];
    for(NSInteger i=0; i<numClasses; i++){
        Class cls = classes[i];
        
        do{
           cls = class_getSuperclass(cls);
        }while(cls && cls != parentClass);
        
        if(cls){
            [result addObject:classes[i]];
        }
    }
    
    free(classes);
    
    return [result copy];
}

相关文章推荐

java继承实质、父类引用指向子类对象(多态)、声明时类型、运行时类型

继承是面向对象的三大特征(封装、继承和多态)之一,也是java语言的重要特性。 那么,继承父类的成员变量和继承父类的方法有什么区别吗?答案是肯定的。有的人甚至都不知道这个问题的存在。 继承成员变量...

第八章 多态总结 协变返回类型 向下转型 和运行时类型识别继承中 is-a 和 is-like-a及子类父类的方法调用(ClassCastException)

1.协变返回类型 表示子类中被覆盖的方法可以返回父类方法的返回类型的某种子类类型。 class Grain { public String toString() { return "Gr...

Lua 与C/C++ 交互系列:动态注册枚举enum到Lua Code中,在运行时在Lua Code中获取内省信息

在C语言特征本身,不提供运行时信息。C语言的拓展集,C++语言特征本身对运行时提供支持。在C++语言中通过typeid(),dynamic_case()等函数可以获取类型的内省信息。 在Java语言中...

Android运行时权限工具类

  • 2017年04月01日 11:16
  • 26.85MB
  • 下载

android 6.0运行时权限 工具类

  • 2017年02月24日 21:35
  • 5KB
  • 下载

VB运行时动态注册添加控件的方法

其实我不想写关于此类方法的文章,但是提问者还是不少,因此我还是写出来,发链接算了   VB中的控件都是指ActiveX DLL或OCX,这些都是COM组件,如果熟悉API可以调用这个文件输出的注册...

[运行时获取模板类类型] Java 反射机制 + 类型擦除机制

运行时获取模板类T的类型:Java 反射机制 + 类型擦除机制。
  • TBWood
  • TBWood
  • 2014年11月03日 17:59
  • 6631

Windows 8安装软件时遇到运行时错误‘339’ MSCOMCTL.ocx或其附件之一未注册

今天安装软件的时候出了这样的问题:运行时错误‘339’ MSCOMCTL.ocx或其附件之一未注册 于是到网上查找了一下,大家都说是缺少一个叫mscomctl32.ocx的东东,而且很多人都...

一个简单的使用C++在运行时获取调用堆栈的类

明天游戏要封测了,感觉稍微早了点,哎,悲剧。昨天把我的Bug改完了,今天在公司闲了一天,写文档差点写得睡着。没事所以回来得早点,7点过就到家了,郁闷的是回来又被新闻联播着实恶心了一把。闲的蛋疼只好写点...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过运行时来获取该注册类的所有子类
举报原因:
原因补充:

(最多只允许输入30个字)