Skip to content

Instantly share code, notes, and snippets.

@Air-Craft
Created January 26, 2015 15:06
Show Gist options
  • Save Air-Craft/c80e26b9678b6dee3286 to your computer and use it in GitHub Desktop.
Save Air-Craft/c80e26b9678b6dee3286 to your computer and use it in GitHub Desktop.
Get a list of all available Objective-C Class objects whose names match a predicate #objective-c #advanced #runtime #dynamic
+ (NSArray *)arrayOfClassObjectsFilteredByPredicate:(NSPredicate *)predicate
{
int numClasses;
Class *classes = NULL;
classes = NULL;
numClasses = objc_getClassList(NULL, 0);
if (numClasses < 1 ) return nil;
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
// Convert to NSArray of NSStrings
NSMutableArray *rtn = [[NSMutableArray alloc] init];
const char *cname;
for (int i=0; i<numClasses; i++) {
cname = class_getName(classes[i]);
if ([predicate evaluateWithObject:[NSString stringWithCString:cname encoding:NSStringEncodingConversionAllowLossy]]) {
[rtn addObject:classes[i]];
}
}
free(classes);
return rtn;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment