美文网首页
运行时-方法替换

运行时-方法替换

作者: lltree | 来源:发表于2018-06-08 18:03 被阅读15次

运行时 方法替换的时候需要执行两步:
第一步:类获取实例方法(class_getInstanceMethod)
第二步:方法交换实现(method_exchangeImplementations)

OBJC_EXPORT Method _Nullable
class_getInstanceMethod(Class _Nullable cls, SEL _Nonnull name)

参数说明:
参数1 cls :为执行SEL的类
参数2 SEL:为要替换的方法

实例如下:

@implementation Person

-(void)methodOrgReplaceWithA:(int)a B:(int)b{
    
       NSLog(@"I'm here");
}
-(void)methodDestReplaceWithA:(int)a B:(int)b{
    
       NSLog(@"I'm here");
}
-(void)methodDestReplaceWithA:(int)a B:(int)b C:(int)c{
    
    NSLog(@"I'm here");
}

+(void)load{
    
    //获取源@selector方法
    Method orgM = class_getInstanceMethod([self class], @selector(methodOrgReplaceWithA:B:));
    //获取目标@selector方法
    Method desM = class_getInstanceMethod([self class], @selector(methodDestReplaceWithA:B:C:));
    
    method_exchangeImplementations(orgM, desM);
    
}
@end

注意:

  • 1 交换的方法必须存在,否则交换不成功
  • 2 交换的参数可以不一致,目标参数按照源参数顺序一一对应,参数按照:少的去掉,多的随机值分配

相关文章

  • 运行时-方法替换

    运行时 方法替换的时候需要执行两步:第一步:类获取实例方法(class_getInstanceMethod)第二步...

  • Swift动态修改Icon,弹窗消除

    extension UIViewController { //通过运行时替换系统的present方法 pu...

  • runtime

    Objective-C可以在运行时修改对象(例如替换class)和类(例如增加、删除和替换ivar和方法),因此符...

  • 12.方法调配技术

    1.在运行时,可以向类中新增或替换选择子所对应的方法实现。2.使用另一份实现替换原来的方法实现:“方法调配”

  • msg_send了解run time

    OC是一门动态语言,可在运行时动态决定调用哪个方法,甚至增加、替换方法的实现,这些都通过OC的运行时(run ti...

  • 深入剖析Objective-C中的Swizzle

    有时候为了达到一些特殊的需求,我们会在运行时期交换两个方法的实现,用我们自己的方法替换原始方法。在OC运行时期,O...

  • GNU 中 KVO isa swizzling具体流程

    记录GNU中,KVO进行类替换的具体实现 一、创建一个用来替换的类 主要方法在于 利用运行时 objc_alloc...

  • 创建一个私有库

    Swift3.0 如果想要对Swift的库进行修改, Swizzle运行时替换方法已经不好用了. 如果源码内的方法...

  • [iOS] Method-Swizzling方法交换

    1. Method-Swizzling 1.1 简介 Runtime 中的黑魔法,运行时替换方法的实现 OC 中利...

  • 神奇的runtime

    (1)在运行时对函数进行动态替换 : class_replaceMethod 使用该函数可以在运行时动态替换某个类...

网友评论

      本文标题:运行时-方法替换

      本文链接:https://www.haomeiwen.com/subject/xzwasftx.html