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

来源:互联网 发布:程序员去的网站 编辑:程序博客网 时间:2024/04/29 17:34

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

#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];
}
0 0
原创粉丝点击