OC 对同一个方法进行多次交换(Method Swilzzling)

Posted hherima

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC 对同一个方法进行多次交换(Method Swilzzling)相关的知识,希望对你有一定的参考价值。

Method Swizzing主要用于在运行时将两个Method进行交换.例如:交换实例方法:

    Method originMethod = class_getInstanceMethod(target, originalSelector);

    Method swizzledMethod = class_getInstanceMethod(target, swizzledSelector);

    method_exchangeImplementations(originMethod, swizzledMethod);

交换类方法

    Method originMethod = class_getClassMethod(target, originalSelector);

    Method swizzledMethod = class_getClassMethod(target, swizzledSelector);

    method_exchangeImplementations(originMethod, swizzledMethod);

如果有系统方法A,下面有两个自定义方法B和C都对A进行交换是什么效果呢?

-(void) B

    [self B]

    printf("B");



-(void) C

    [self C]

    printf("C");

看一下交换的过程 A和B交换后:

selector A ↘            ↗IMPa

                        ↘↗

selector B   ↗      ↘    IMPb

selector C → → →  IMPc

A和C交换后

selector A ↘                ↗IMPa

                      ↘    ↗ 

selector B   ↗  ↘      ↗   IMPb

                          ↗↘

selector C ↗             ↘   IMPc

程序执行到 A()的时候,执行IMPc函数指针,IMPc中有C()调用,实际执行IMPb的函数指针,IMPb中有B()的调用,实际执行IMPa的系统方法。所以依次打印出B,C

在一个函数总展开则是这样:

IMPc

    IMPb

        IMPa;

        prinitf("B");

    

     printf("C");


 

 

 

以上是关于OC 对同一个方法进行多次交换(Method Swilzzling)的主要内容,如果未能解决你的问题,请参考以下文章

什么是method swizzling

OC中实现锁

交换机工作原理

交换机工作原理

如何配置三层交换机的详细方法

链路聚合综合实验