iOS Developer - RuntimeiOS开发技术分享iOS Developer

iOS利用Runtime机制进行方法交换

2016-09-04  本文已影响75人  ZzQzz

离职后得了空闲,今天跟大家分享一下运行时中的方法交换.
其实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];
}
上一篇下一篇

猜你喜欢

热点阅读