快速上手Runtime(四)之动态添加方法

如果一个类方法非常多,加载类到内存的时候也比较耗费资源,可以使用动态给某个类,添加方法解决。做到优化内存,节省资源的效果。

 

//
//  Person.m
//  ResolveInstanceMethod
//
//  Created by Doman on 17/3/23.
//  Copyright © 2017年 doman. All rights reserved.
//

#import "Person.h"
#import <objc/message.h>

@implementation Person

// 动态添加方法,首先实现这个resolveInstanceMethod
// resolveInstanceMethod调用:当调用了没有实现的方法没有实现就会调用resolveInstanceMethod
// resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法
// sel:没有实现方法

// 定义函数
// 没有返回值,参数(id,SEL)
// void(id,SEL)

void eatFun(id self, SEL _cmd, id msg)
{
    NSLog(@"Person eat  %@--%@%@",self,NSStringFromSelector(_cmd),msg);
}

+(BOOL)resolveInstanceMethod:(SEL)sel
{
    if (sel == @selector(eat:)) {
        
        /*
         cls:给哪个类添加方法
         SEL:添加方法的方法编号是什么
         IMP:方法实现,函数入口,函数名
         types:方法类型   可查看官方文档查询:Type Encodings
         */

        class_addMethod(self, sel, (IMP)eatFun, "v@:@");
        
        // 处理完
        return YES;

    }
    
    return [super resolveInstanceMethod:sel];
}

@end

 

实现效果:

 

 

Demo地址:https://github.com/domanc/ResolveInstanceMethod.git

 

转载于:https://www.cnblogs.com/dianming/p/6606415.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值