采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
使用method swizzling交换两个方法的时候 需要把需要交换的两个方法先添加进去,如果父类中没有会成功;如果父类中已经存在方法则会把父类中的方法覆盖,实际交换的也是交换的也是当前这个类的方法而不会影响到父类中的方法?既然都覆盖了父类的方法为什么不会影响呢?该如何理解?
添加方法是直接添加到自己方法列表,和父类没关系。
为了避免影响到父类的方法,要先添加方法。是指:
调用method_exchangeImplementations时,会用到class_getInstanceMethod方法,而这个方法会走IMP查找流程,如果自己没有实现,可能会查找到父类,然后把父类的方法给交换了。
子类和父类各自有一套方法表,你所说的覆盖实际上是子类查找到了自己方法列表里的实现了。然而父类不受影响。
登录后可查看更多问答,登录/注册
高薪职位,复杂业务需求,高性能APP,Runtime技术不可不学。
749 5
856 4
779 4
886 4
653 4