RunTime-消息的拦截与替换

来源:互联网 发布:网络招聘平台分析报告 编辑:程序博客网 时间:2024/05/15 00:36

1、创建一个类Person

声明一个方法:- (void)talk;

2、在vc中实例化person对象   并实现:- (void)talk2;

3、实现replace函数可以将person调用的talk替换成talk2

代码如下:

- (void)replace{    Person *man = [[Person alloc] init];    man.name = @"成龙";        SEL original = @selector(talk);    SEL replacement = @selector(talk2);        Method a = class_getInstanceMethod([Person class], original);    Method b = class_getInstanceMethod([self class], replacement);    if (class_addMethod([Person class], original, method_getImplementation(b), method_getTypeEncoding(b)))    {        class_replaceMethod([Person class], replacement, method_getImplementation(a), method_getTypeEncoding(a));    }    else    {        method_exchangeImplementations(a, b);    }        [man talk];}

当man调用talk时实际上执行的是vc中得talk2函数


0 0