1 #import "ITCategory-NSObject.h"
2 #import <objc/objc-runtime.h>
4 @implementation NSObject (ITCategory)
6 + (NSArray *)subclasses
8 NSMutableArray *tempArray;
11 struct objc_class *superClass;
13 int count, newCount, index;
15 tempArray = [[NSMutableArray allocWithZone:nil] initWithCapacity:12];
21 count = objc_getClassList(NULL, 0);
24 classes = malloc(sizeof(Class) * count);
27 newCount = objc_getClassList(classes, count);
28 while (count < newCount)
32 classes = malloc(sizeof(Class) * count);
34 newCount = objc_getClassList(classes, count);
42 const Class thisClass = [self class];
45 for (index = 0; index < count; ++index)
47 superClass = (*current)->super_class;
52 if (superClass == thisClass)
54 [tempArray addObject:*current];
57 superClass = superClass->super_class;
67 resultArray = [NSArray arrayWithArray:tempArray];
74 + (NSArray *)directSubclasses
76 NSMutableArray *tempArray;
80 int count, newCount, index;
82 tempArray = [[NSMutableArray allocWithZone:nil] initWithCapacity:12];
88 count = objc_getClassList(NULL, 0);
91 classes = malloc(sizeof(Class) * count);
94 newCount = objc_getClassList(classes, count);
95 while (count < newCount)
99 classes = malloc(sizeof(Class) * count);
101 newCount = objc_getClassList(classes, count);
109 const Class thisClass = [self class];
112 for (index = 0; index < count; ++index)
114 if ((*current)->super_class == thisClass)
115 [tempArray addObject:*current];
122 resultArray = [NSArray arrayWithArray:tempArray];