objc_getClassList fornece uma lista de todas as classes disponÃveis, perguntando ao tempo de execução ObjC.
Não se esqueça de importar para o tempo de execução (#import <objc / runtime.h>) e vincular a ele (libobjc.dylib).
Você pode então fazer coisas engraçadas; por exemplo: encontrar classes com um nome que corresponda a um padrão especÃfico com um bloco:
NSArray* getClassesMatching(BOOL(^block)(NSString *className)) {
NSMutableArray *array = [NSMutableArray array];
int numClasses;
Class * classes = NULL;
classes = NULL;
numClasses = objc_getClassList(NULL, 0);
if (numClasses > 0 ) {
classes = malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
Class class = nil;
for (int i = 0; i < numClasses; i++) {
class = classes[i];
if (block([NSString stringWithCString:class_getName(classes[i]) encoding:NSUTF8StringEncoding])) {
[array addObject:class];
}
}
free(classes);
}
return [array copy];
}