使用runtime替换类的方法

使用runtime替换类的方法
一些系统类或者第三方库的类方法无法修改原文件中的方法,可以通过添加分类,method_exchangeImplementations替换方法实现对原方法的修改
#import "NSObject+Repail.h"
#import <objc/runtime.h>
#import "LivefaceViewController.h"
@implementation LivefaceViewController (Repail)

+ (void)load {
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    Method m1 = class_getInstanceMethod([self class], NSSelectorFromString(@"setCallBackQueue:"));
    Method m2 = class_getInstanceMethod([self class], NSSelectorFromString(@"__t_setCallBackQueue:"));
    method_exchangeImplementations(m1, m2);
  });
}

- (void)__t_setCallBackQueue:(dispatch_queue_t)callBackQueue {
  [self performSelector:@selector(__t_setCallBackQueue:) withObject:dispatch_get_main_queue() afterDelay:0];
}

@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引导 对于从事 iOS 开发人员来说,所有的人都会答出「 Runtime 是运行时 」,什么情况下用 Runtim...
    Winny_园球阅读 4,238评论 3 75
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,732评论 7 64
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 一转眼,2016也只剩最后一个月了。今年发生了许多的事,尤其是邻近年末的这个时候,美国大选、卡斯特罗的去世...但...
    神来武帝阅读 1,465评论 0 1
  • 二十几岁,内心经历了几大动荡,差点抑郁成性,幸好靠着这些都会过去,都是暂时的度过了最难熬的时光,那种内心的抑郁是最...
    知更鸟Robin阅读 809评论 0 2