一、什么是钩子函数

hook函数就是在一定条件下才会执行的函数,将自己实现的函数挂载到挂载点上

1. hook函数:就是我们自己实现的函数,函数类型与挂载点匹配(返回值,参数列表)

2. 挂接:也就是hook或者叫注册(register),使得hook函数对目标可用

3. 目标挂载点:也就是挂我们hook函数的地方(我们想在这个目标点实现我们自己的功能

二、使用场景

一般在流程性的代码中会使用hook函数,挂载点可能会执行我们实现的函数,也可能不执行,当满足一定条件才会执行的情况下

三、举例

hook的概念在windows的消息响应机制里面体现的尤为明显。可能我们大家有写过windows桌面相关的程序(像MFC),里面有各种消息监听响应机制。比如,要监听鼠标左键是否按下这个事件,我们要去实现一个onLeftKeyDown()之类的方法,该方法可以称为钩子函数。同时,我们还要去注册钩子函数,MFC中是通过一组宏来实现的。这样当鼠标左键按下后,就能调到我们定义的方法了。

大家思考一下上面这个例子,左键按下方法具体的逻辑是由框架自身去实现,还是由我们用户(调用者)去实现呢?显然应该由我们自己去实现。要提供通用的框架能力,框架自身去实现该方法功能,是没有意义的,所以框架给提供一个挂载的point,把具体逻辑的实现交给用户就好了,灵活可用。

四、使用方法

hook指定商品ios hook指定函数_hook指定商品ios

 

 钩子函数的实现就是通过一定的关系,将两个函数产生关联,例如上面的例子,register_rice_hook函数和make_rice通过self.make_rice产生关联,如果要执行make_rice函数,需要先进行注册(register_rice_hook),然后判断注册时传入的self.make_rice是否为空,如果为空则表示注册未成功,则不执行我们自己写的函数make_rice,如果不为空,则表示注册成功,则执行函数make_rice,大大扩展了类的可执行方法