Skip to content

Instantly share code, notes, and snippets.

@orta
Created February 16, 2014 17:42
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save orta/9037851 to your computer and use it in GitHub Desktop.
Save orta/9037851 to your computer and use it in GitHub Desktop.
Check all view controllers to see if they load the view on init
//
// ARAllViewControllers.m
// Artsy
//
// Created by Orta on 16/02/2014.
// Copyright (c) 2014 Art.sy. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "ARClassGetSubclasses.h"
@interface ARAllViewControllers : XCTestCase
@end
@implementation ARAllViewControllers
- (void)testAllViewControllerSubclassesDoNotCallViewLoadOnInit
{
NSArray *classes = ARClassGetSubclasses(UIViewController.class);
for (Class klass in classes) {
NSString *klassName = NSStringFromClass(klass);
if (![klassName hasPrefix:@"AR"]) continue;
@try {
UIViewController *controller = [[klass alloc] init];
NSLog(@"Loaded: %d - %@", controller.isViewLoaded, klassName);
}
@catch (NSException *exception) {
}
}}
@end
//
// ARClassGetSubclasses.h
// Artsy
//
// Created by Orta on 16/02/2014.
// Copyright (c) 2014 Art.sy. All rights reserved.
//
extern NSArray *ARClassGetSubclasses(Class parentClass);
//
// ARClassGetSubclasses.m
// Artsy
//
// Created by Orta on 16/02/2014.
// Copyright (c) 2014 Art.sy. All rights reserved.
//
// https://gist.github.com/d4rkl1gh7/1075882
#import "ARClassGetSubclasses.h"
#import <Foundation/Foundation.h>
#import <objc/objc-runtime.h>
NSArray *ARClassGetSubclasses(Class parentClass) {
int numClasses = objc_getClassList(NULL, 0);
Class *classes = NULL;
classes = malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
NSMutableArray *result = [NSMutableArray array];
for (NSInteger i = 0; i < numClasses; i++) {
Class superClass = classes[i];
do{
superClass = class_getSuperclass(superClass);
} while(superClass && superClass != parentClass);
if (superClass == nil) {
continue;
}
[result addObject:classes[i]];
}
free(classes);
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment