RunTime-消息的拦截与替换

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函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值