赞
踩
- + (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);
- }
再给一个类或者对象发送消息时如果找不到对应的方法实现,则会进入上诉两个方法中,可在上诉方法中动态添加方法.网上的一些博客只给出如何添加对象方法,而没写如何添加类方法,之前的笔记丢失现在想起来就记录在博客上,希望能帮到需要用的人。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。