OC HOOK

1、需求:

如果要扩展方法,不改变方法名,也不改变类名,要怎么做才好呢?

2、解决方案:

可以使用OC HOOK原理把函数体给换了。

3、OC HOOK 原理:

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。

参考链接

4、使用:

1)IMP method_setImplementation(Method m,IMP imp):设置一个方法的实现

m:目标方法

imp:方法的实现

2)BOOL class_addMethod(Class cls, SEL name, IMP imp,const char *types):给一个类添加一个类方法

cls:目标类

name:指定该方法名称的选择器

imp:新方法的实现

types:字符数组,描述类型的参数

3)Method class_getInstanceMethod(Class cls, SEL name):获取一个实例方法

cls:目标类

name:指定该方法名称的选择器

4)Method class_getClassMethod(Class cls, SEL name)获取一个类方法

5)IMP class_getMethodImplementation(Class cls, SEL name):获取cls中方法名为name的方法的实现

6)IMP method_getImplementation(Method m):获取一个方法的实现

7)void method_exchangeImplementations(Method m1, Method m2):交换两个方法的实现(注意:交换两个方法的实现也会把方法m2的调用对象换成m1的调用对象,m1的调用对象不变)

5、实例:

OC HOOK_第1张图片

你可能感兴趣的:(OC HOOK)