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)的主要内容,如果未能解决你的问题,请参考以下文章