p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ff2600; background-color: #ffffff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #d12f1b; background-color: #ffffff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ba2da2; background-color: #ffffff }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #008400; background-color: #ffffff }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #0433ff; background-color: #ffffff }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #aa7942; background-color: #ffffff }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #ff40ff; background-color: #ffffff }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #000000; background-color: #ffffff }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Yuanti SC"; color: #3e1e81; background-color: #ffffff }
span.s1 { color: #78492a }
span.s2 { color: #000000 }
span.s3 { color: #008400 }
span.s4 { color: #ba2da2 }
span.s5 { color: #ff2600 }
span.s6 { color: #31595d }
span.s7 { color: #d12f1b }
span.s8 { color: #703daa }
class_addMethod
#import "Person.h"
#import <objc/message.h>
@implementation Person
/*
OC的方法调用,会传递两个隐式参数!给IMP(方法实现)!!
objc_msgSend(self,_cmd);
id self 方法调用者
SEL _cmd 方法编号
*/
//instanceMethod 实例方法 classMethod 类方法
//如果该类接收到一个没有实现的实例方法,就会来到这里
+(BOOL)resolveInstanceMethod:(SEL)sel {
//NSLog(@"%@",NSStringFromSelector(sel));
//动态添加一个方法!!
/*
1.class 哪个类
2.SEL
3.IMP 函数的指针
4.返回值类型
*/
class_addMethod(self, sel, (IMP)haha, "[email protected]:@");
return [super resolveInstanceMethod:sel];
}
void haha(id obj, SEL sel , NSString*objc) {
//NSLog(@"吃到了%@",objc);
//obj 调用者
//sel 方法编号
//objc 参数
NSLog(@"%@--%@--%@",obj,NSStringFromSelector(sel),objc);//(null)--eat:--汉堡!!
//objc_msgSend(p,@selector(eat:),@"汉堡");
}
void myMethodIMP(id self, SEL _cmd)//默认参数
{
// implementation ....
}
原文地址:https://www.cnblogs.com/StevenHuSir/p/Runtime_AddMethod.html