+ (BOOL)resolveClassMethod:(SEL)sel{
Class cls = objc_getMetaClass([NSStringFromClass(self) UTF8String]);
IMP impPoint = class_getMethodImplementation(cls, @selector(cx_clsMethod));
Method clsMethon = class_getClassMethod(cls, @selector(cx_clsMethod));
const char *encoding = method_getTypeEncoding(clsMethon);
class_addMethod(cls, sel, impPoint, encoding);
return YES;
}
+(BOOL)resolveInstanceMethod:(SEL)sel
{
//动态添加一个方法!!
/*
1.cls 哪个类
2.SEL
3.IMP
4.返回值类型!
*/
class_addMethod(self, sel, (IMP)cx_instanceMethod, "v@:@");
return [super resolveInstanceMethod:sel];
}
+(void)cx_clsMethod{
NSLog(@"动态添加一个类方法!");
}
void cx_instanceMethod(id obj,SEL sel,NSString * objc){
NSLog(@"动态添加一个对象方法!");
NSLog(@"%@--%@--%@",obj,NSStringFromSelector(sel),objc);
}
再给一个类或者对象发送消息时如果找不到对应的方法实现,则会进入上诉两个方法中,可在上诉方法中动态添加方法.网上的一些博客只给出如何添加对象方法,而没写如何添加类方法,之前的笔记丢失现在想起来就记录在博客上,希望能帮到需要用的人。
本文深入讲解了在Objective-C中如何动态地为类或对象添加方法。通过objc运行时API,可以实现在运行时动态添加类方法和实例方法,这对于理解Objective-C的动态特性至关重要。
429

被折叠的 条评论
为什么被折叠?



