#import @import ObjectiveC; void print_class_hierachy(Class cls){ printf("%s\n",class_getName(cls)); Class superclass = class_getSuperclass(cls); int current_level = 0; while (superclass) { current_level++; for (int level = 0; level < current_level;level++) { if(level + 1 == current_level){ printf("|----"); }else{ printf(" "); } } printf("%s\n",class_getName(superclass)); superclass = class_getSuperclass(superclass); } } int main(int argc, const char * argv[]) { @autoreleasepool { static unsigned int classCount = 0; Class * classList = objc_copyClassList(&classCount); int level = 0; int min_print_level = 4; for (unsigned int i = 0; i < classCount; i++) { Class leafClass = classList[i]; Class superclass = class_getSuperclass(leafClass); level = 0; while (superclass) { level++; superclass = class_getSuperclass(superclass); } if(level >= min_print_level){ print_class_hierachy(leafClass); } } free(classList); } return 0; }