ios 通过runtime 获取类对象的所有子类

oc写法


//获取指定类的子类
- (NSArray *)findSubClass:(Class)defaultClass

{
    
    //注册类的总数
    int count = objc_getClassList(NULL,0);
    
    //创建一个数组,其中包含给定对象
    NSMutableArray * array = [NSMutableArray arrayWithObject:defaultClass];
    
    //获取所有已注册的类
    Class *classes = (Class *)malloc(sizeof(Class) * count);
    
    objc_getClassList(classes, count);
    
    //遍历
    for (int i = 0; i < count; i++) {
        
        if (defaultClass == class_getSuperclass(classes[i])) {
            
            [array addObject:classes[i]];
            
        }
        
    }
    
    free(classes);
    return array;
    
}

swift 写法


 fileprivate class func performOnce(){
        
        //注册类的总数
        let count = Int(objc_getClassList(nil, 0))
        
        //分配空间 
        let classes = UnsafeMutablePointer<AnyClass?>.allocate(capacity: count)
        
        //转类型
        let autoreleaseClasses = AutoreleasingUnsafeMutablePointer<AnyClass>(classes)
        
        //获取所有的类
        objc_getClassList(autoreleaseClasses, Int32(count))
        
        
        for index in 0..<count{
            
            
            (classes[index] as? AwakeProtocol.Type)?.awake()
            
        }
        
        //释放
        
        classes.deallocate()
        
        
    }
   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容