使用RunTime添加动态方法、方法交换、获取所有属性来重写归档解档

#import "JZGMMMMModel.h"
#import <objc/message.h>
@implementation JZGMMMMModel
//**动态添加方法
void addmethod(id self, SEL _cmd)
{
    NSLog(@"addmethod");
}
+(BOOL)resolveInstanceMethod:(SEL)sel
{
    class_addMethod([self class], @selector(addmethod), (IMP)addmethod, "v@:");
    return [super resolveInstanceMethod:sel];
}



 +(void)load
{
    // 获取原始setBackgroundColor方法
    Method originalM = class_getInstanceMethod([self class], @selector(setBackgroundColor:));
    
    // 获取自定义的pb_setBackgroundColor方法
    Method exchangeM = class_getInstanceMethod([self class], @selector(pb_setBackgroundColor:));
    method_exchangeImplementations(originalM, exchangeM);
}
// 自定义的方法
-(void)pb_setBackgroundColor:(UIColor *) color{
    
    NSLog(@"%s",__FUNCTION__);
    
    /*
     1.更改颜色
     2.所有继承自UIView的控件,设置背景色都会设置成自定义的'orangeColor'
     3. 此时调用的方法 'pb_setBackgroundColor' 相当于调用系统的 'setBackgroundColor' 方法,原因是在load方法中进行了方法交换.
     4. 注意:此处并没有递归操作.
     *//*
    [self pb_setBackgroundColor:[UIColor orangeColor]];
}

连接 :http://www.jianshu.com/p/ab966e8a82e2

 

转载于:https://www.cnblogs.com/mkai/p/6627717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值