首页 > 其他 > 详细

RunTime-消息的拦截与替换

时间:2014-04-24 12:52:49      阅读:821      评论:0      收藏:0      [点我收藏+]

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


RunTime-消息的拦截与替换,布布扣,bubuko.com

RunTime-消息的拦截与替换

原文:http://blog.csdn.net/fucheng56/article/details/24365587

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!