请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

1回答

逆风 2019-07-01 21:14:12

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


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

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


0 回复 有任何疑惑可以回复我~
  • 逆风 #1
    子类和父类各自有一套方法表,你所说的覆盖实际上是子类查找到了自己方法列表里的实现了。然而父类不受影响。
    回复 有任何疑惑可以回复我~ 2019-07-01 21:17:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信