iOS 方法交换 method_exchangeImplementations

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 方法交换 method_exchangeImplementations相关的知识,希望对你有一定的参考价值。

参考技术A 方法交换

使用方法交换需要注意些什么呢

1、在交换系统方法后要注意结束前调用本方法,也就是执行系统方法

2、再交换前,判断类中是否已经实现了系统方法,没有的话需要增加方法,避免交换父类方法

3、加dispatch_once,只执行一次

方法交换

当我们用如下方法写方法交换的时候,会出现什么问题呢

设想一种情况,想交换UIButton的sendAction方法,用上述方法,实际上交换的是父类的sendAction和UIButton的custom方法,那么当点击其他继承UIControl的类时,比如UISegmentedControl,会出现崩溃,因为调用UISegmentedControl的sendAction调用的是custom方法,但是UISegmentedControl是没有这个custom方法的,就会抛出异常

那么就要增加判断

或者

第二种和第三种原理是一样的,只是写法略有不同

以上是关于iOS 方法交换 method_exchangeImplementations的主要内容,如果未能解决你的问题,请参考以下文章

iOS——面向AOP编程(方法交换)

iOS 方法交换 method_exchangeImplementations

iOS 方法交换的原理

交换机IOS升级及备份方法是啥

ios开发runtime学习二:runtime交换方法

iOS 为何使用runtime多次方法交换后却能按照交换顺序依次执行代码逻辑?