//0 方法的数量
unsigned int count = 0;
//1.获取类所有的属性
//:第一个参数:哪一个类 第二个参数:用于接收方法的数量的地址 返回值是一个结构体数组
Method *methodList = class_copyMethodList([Father class], &count);
//2.遍历方法数组,获取方法的详细信息
for (int i =count - 1; i >= 0; i--) {
Method method = methodList[i];
//3.获取方法签名
SEL sel = method_getName(method);
IMP imp = method_getImplementation(method);
//4.获取方法名字符串
const char *methodName = sel_getName(sel);
//c字符串转成oc字符串
NSString *methodStr = [[NSString alloc] initWithUTF8String:methodName];
if([methodStr isEqualToString:@"hello"]) {
//5.调用imp
// 没有参数的调用
imp();
//如果方法没有传入参数时:
void (*func)(id, SEL) = (void *)imp;
func(self, sel);
//如果方法传入一个参数时:
void (*func1)(id, SEL,id) = (void *)imp;
func(self, sel, param);
//如果方法传入俩个参数时:
void (*func2)(id, SEL,id,id) = (void *)imp;
func(self, sel, param1, param2);
break;
}
}
//C对象都需要手动释放(一般带*需要释放)
free(methodList);
iOS 通过方法遍历调用被分类覆盖的方法
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1、 类(Class)结构 在源码中查看类信息 ⚠️:错误跟踪: 在我们开发的工程中,通过command 跟踪进去...
- 在OC 中,使用category会让我们在开发中非常方便,可以为某个类增添方法,对类别自己有一点小小的体会,首先先...
- 在上一篇文章iOS-底层原理11:消息流程分析之慢速查找[https://www.jianshu.com/p/51...