//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);
网友评论