iOS底层学习26 -- runtime 方法交换原理
2020-11-19 本文已影响0人
恋空K
方法交换之前
方法交换,交换的是方法的实现。一旦调用方法交换(也就是调用了这个method_exchangeImplementtatio
ns方法),就会清空缓存,缓存会重新来一遍。方法交换,method_exchangeImplementtations真正交换
的是类对象里面的方法列表(rw_r里面的方法数组)里面的方法对象里面(method_t)的imp(也就是方法实现)
方法交换之后
交换方法的源码
清除缓存
这样既能拦截系统的方法,做自己想做的事情,也不会覆盖掉系统的方法
这么写会造成死循环,不能这么写
数组中不能加nil,会造成crash
Foundation框架里面自带的一些类,表面上是这种类型,可能真实类型是另外一种,比如数组。这种类称为类簇
这个是最终的父类
集合类型的类,要可变和不可变的两种