离职后得了空闲,今天跟大家分享一下运行时中的方法交换.
其实iOS开发中,真正需求你用运行时写的代码并不多,但是作为我们本身,了解OC的运行机制,是一种必要的提升.
话不多说,上代码
/**
* 在load中交换viewDidLoad和NK_viewDidLoad
*/
+(void)load{
Method N1=class_getInstanceMethod([self class], @selector(viewDidLoad));
Method N2=class_getInstanceMethod([self class], @selector(fc_viewDidLoad));
BOOL notImplemented=class_addMethod([self class], @selector(viewDidLoad), method_getImplementation(N2), method_getTypeEncoding(N2));
if(!notImplemented){
method_exchangeImplementations(N1, N2);
}
}
这样我们就轻松实现了方法的交换,很简单吧!
/**
* [self NK_viewDidLoad] 其实是调用了viewDidLoad的实现
*/
-(void)NK_viewDidLoad{
NSLog(@"%s",func);
[self NK_viewDidLoad];
}