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

离职后得了空闲,今天跟大家分享一下运行时中的方法交换.
其实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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容