工程中控制器不少,需要全部替换背景颜色,比较麻烦,想到了Runtime这一OC黑科技。放码上来:
创建UIViewController的Category,在.m文件中实现以下两个方法,在viewDidLoaded中写入想执行的代码即可。
+ (void)load{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//获取这个类的viewDidLoad方法,它的类型是一个objc_method结构体的指针
Method viewDidLoad = class_getInstanceMethod(self, @selector(viewDidLoad));
Method viewDidLoaded = class_getInstanceMethod(self, @selector(viewDidLoaded));
method_exchangeImplementations(viewDidLoaded, viewDidLoad);
});
}
- (void)viewDidLoaded{
//调用自己原有的方法
[self viewDidLoaded];
self.view.backgroundColor = [UIColor yellowColor];
NSLog(@"%@ did load",self);
}
PS:
#import <objc/runtime.h>
关于load函数详见另一篇博客NSObject的load和initialize方法