u_int count ;
Method *methods = class_copyMethodList([Person class], &count);
NSInteger indx = 0 ;
for (int i = 0 ; i < count; i++) {
SEL name = method_getName(methods[i]);
NSString *selName = [NSString stringWithCString:sel_getName(name) encoding:NSUTF8StringEncoding];
NSLog(@"selName=%@",selName);
if ([selName isEqualToString:@"print"]) {
indx = i ;
}
}
SEL sel = method_getName(methods[indx]);
IMP imp = method_getImplementation(methods[indx]);
((void (*)(id,SEL))imp)(self,sel);
//((void (*)(id,SEL))objc_msgSend)(self, selector);
第一行代码是通过方法的IMP来执行方法,
第二行代码是通过消息发送的形式objc_msgSend的方法去执行方法