分析:该函数的作用是获取已经注册的类,它需要传入两个参数,第一个参数 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
)