0
点赞
收藏
分享

微信扫一扫

Objective-C 动态生成中间类

女侠展昭 2021-09-19 阅读 62

有这样一个需求:

类Target,声明两个类Target的实例targetA,targetB;

当实例targetA调用方法oriMethod时,调用oriMethod;

当实例targetB调用方法oriMethod时,则实际调用的是hook之后的方法targetMethod

当面对上述需求时,Objective-C的动态性优势就显示出来啦;

具体实现原理类同KVO底层原理,给targetB类添加观察者,在观察方法中动态的生成一个中间类,然后在中间类中将方法oriMethod和targetMethod进行methodSwizzing;

具体实现步骤:

创建一个NSObject的Category,(NSObject+Swizzing.h),在类中添加两个方法


判断原始方法(oriMethod)是否存在,如果不存在,那么直接返回,没必要进行后续操作


动态生成中间类

lt_class方法实现,用来将iSA返回父类

lt_dealloc方法,对象释放会自动调用

交换的核心方法

以上就是动态生成类以及类中添加方法的核心代码;

需要注意的是:

在ltAddObserver方法中,中间类创建出来后,一定要将修改iSA指向,否则调不到;

在ltRemoveObserver方法中,主要实现在移除观察之后,将iSA指针指回去;

还里利用associatedObject将被观察类和方法添加到全局表中(存储的是model信息)

具体代码实现 喜欢记得点星星哦

举报

相关推荐

0 条评论