Runtime 动态加载方法

动态加载
#import"ViewController.h"
#import"Person.h"

@interfaceViewController()

@end

@implementationViewController

- (void)viewDidLoad {
    [super viewDidLoad];

   // performSelector:动态添加方法
   Person*p = [[Person alloc]init];

   //动态添加方法
   //[p performSelector:@selector(eat)];

//传参 [pperformSelector:@selector(eat:)withObject:@111]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } Person.h #import<Foundation/Foundation.h> @interfacePerson :NSObject @end Person.m #import"Person.h" #import<objc/message.h> @implementationPerson //定义函数 //没有返回值,参数(id,SEL) // void(id,SEL) voidaaaa(idself,SEL_cmd,idparam1) { NSLog(@"调用eat %@ %@ %@",self,NSStringFromSelector(_cmd),param1); } //默认一个方法都有两个参数,self,_cmd,隐式参数 // self:方法调用者 // _cmd:调用方法的编号 //动态添加方法,首先实现这个resolveInstanceMethod // resolveInstanceMethod调用:当调用了没有实现的方法没有实现就会调用resolveInstanceMethod // resolveInstanceMethod作用:就知道哪些方法没有实现,从而动态添加方法 // sel:没有实现方法 + (BOOL)resolveInstanceMethod:(SEL)sel { // NSLog(@"%@",NSStringFromSelector(sel)); //动态添加eat方法 if(sel ==@selector(eat:)) { /* cls:给哪个类添加方法 SEL:添加方法的方法编号是什么 IMP:方法实现,函数入口,函数名 types:方法类型 */ // @:对象:SEL class_addMethod(self, sel, (IMP)aaaa,"v@:@");//V@:@所代表的意思请查阅官方文档 //处理完 return YES; } return[super resolveInstanceMethod:sel]; } @end

源自小马哥教学视频

转载于:https://www.cnblogs.com/mapanguan/p/5498173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值