method swizzling交换两个方法,父类中已经存在方法则会把父类中的方法覆盖但是不会受到影响,该如何理解?

来源:9-1 Method Swizzling处理数组越界-原理分析

慕用8453459

2019-07-01

使用method swizzling交换两个方法的时候 需要把需要交换的两个方法先添加进去,如果父类中没有会成功;如果父类中已经存在方法则会把父类中的方法覆盖,实际交换的也是交换的也是当前这个类的方法而不会影响到父类中的方法?既然都覆盖了父类的方法为什么不会影响呢?该如何理解?

写回答

1回答

逆风

2019-07-01

添加方法是直接添加到自己方法列表,和父类没关系。


为了避免影响到父类的方法,要先添加方法。是指:

调用method_exchangeImplementations时,会用到class_getInstanceMethod方法,而这个方法会走IMP查找流程,如果自己没有实现,可能会查找到父类,然后把父类的方法给交换了。


0
1
逆风
子类和父类各自有一套方法表,你所说的覆盖实际上是子类查找到了自己方法列表里的实现了。然而父类不受影响。
2019-07-01
共1条回复

面试跳槽提升必备 全面解析iOS中的Runtime机制

高薪职位,复杂业务需求,高性能APP,Runtime技术不可不学。

275 学习 · 48 问题

查看课程