美文网首页
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