iOS方法替换的函数

由于项目需要,实现了一个方法替换函数,比如这样子就可以用自己的方法去替代框架提供的默认的方法了:

void MethodSwizzle(Class aClass, SEL orig_sel, SEL alt_sel) {
    Method orig_method = nil, alt_method = nil;
    orig_method = class_getInstanceMethod(aClass, orig_sel);
    alt_method = class_getInstanceMethod(aClass, alt_sel);
    if ((orig_method != nil) && (alt_method != nil))
    {
        IMP originIMP = method_getImplementation(orig_method);
        IMP altIMP = method_setImplementation(alt_method, originIMP);
       method_setImplementation(orig_method, altIMP);
    }
}


 

使用方法,比如:

+ (void)changeSetFontImplementation {
    MethodSwizzle([self class], @selector(setFont:), @selector(customSetFont:));
}


 

假如上面这个方法是UILabel的类别中的方法,那么我们可以在- (void)applicationDidFinishLaunching:(UIApplication *)application中这样调用:

[UILabel changeSetFontImplementation];

如此,整个工程中的.text=所调用的方法就是自己实现的方法了。

 

enjoy : )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值