动态加载 #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
源自小马哥教学视频