iOS讨论组@IT·互联网iOS Developer

runtime常见用法二(交换方法)

2017-04-27  本文已影响22人  BigBowen

简单实现

接下来介绍一个iOS开发的黑魔法,方法交换,顾名思义,就是你可以在项目运行时替换一个方法的实现,例如,你想把类A的a方法替换为b方法.
大概思路:
1.给类A提供一个分类
2.给分类提供一个我们想要实现的方法b
3.然后将该b方法和a方法交换.
代码:

+ (void)load {
Method aMethod = class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>);
Method bMethod = class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>);
method_exchangeImplementations(aMethod, bMethod);
}

注意点

1.给系统的类提供分类时最好不要重写系统的方法,假设是class A的a方法,你在分类里面重写该系统方法,然后调用super防止a方法的其它功能被干掉,但是,你有没有发现,我们是在分类里调用super,你能保证A的super有这个方法吗?就算有,也不能保证没有被A重写过,所以,这种方法最好少用.
2.交换方法的实现要写在load方法里面,因为交换方法只需要实现一次,如果执行了第二次,那这两个方法就会被交换回来了.

上一篇下一篇

猜你喜欢

热点阅读