美文网首页
Runtime-objc_getClassList

Runtime-objc_getClassList

作者: linbj | 来源:发表于2018-02-26 19:26 被阅读60次
    image.png
    分析:该函数的作用是获取已经注册的类,它需要传入两个参数,第一个参数 buffer :已分配好内存空间的数组,第二个参数 bufferCount :数组中可存放元素的个数,返回值是注册的类的总数。
    当参数 bufferCount 值小于注册的类的总数时,获取到的是注册类的集合的任意子集
    第一个参数传 NULL 时将会获取到当前注册的所有的类,此时可存放元素的个数为0,因此第二个参数可传0,返回值为当前注册的所有类的总数。
    
    
    + (NSArray *)findAllOf:(Class)defaultClass {
        int count = objc_getClassList(NULL, 0);
        if (count <= 0) {
            @throw@"Couldn't retrieve Obj-C class-list";
            return @[defaultClass];
        }
    
        NSMutableArray *output = @[].mutableCopy;
        Class *classes = (Class *) malloc(sizeof(Class) * count);
        objc_getClassList(classes, count);
        for (int i = 0; i < count; ++i) {
            // //子类
            if (defaultClass == class_getSuperclass(classes[i])) {
                [output addObject:classes[i]];
            }
        }
        free(classes);
        return output.copy;
    
    }
    
        NSLog(@"%@", [self.class findAllOf:[NSArray class]]);
    
    [10194:3617842] (
        AXElementGroup,
        "_PFEncodedArray",
        "_PFBatchFaultingArray",
        "_PFArray",
        CSSearchableItemCodedArray,
        WebCascadeList,
        "_CTFontFallbacksArray",
        "_NSCallStackArray",
        NSKeyValueArray,
        "_NSMetadataQueryResultGroupArray",
        "_NSMetadataQueryResultArray",
        "__NSOrderedSetArrayProxy",
        "__NSArrayReversed",
        CALayerArray,
        "__NSArrayI",
        "__NSArray0",
        "__NSSingleObjectArrayI",
        NSMutableArray
    )
    

    相关文章

      网友评论

          本文标题:Runtime-objc_getClassList

          本文链接:https://www.haomeiwen.com/subject/nflyxftx.html