iOS开发之IMP和SEL(方法和类的反射)
1、SEL:类方法的指针,相当于一种编号,区别与IMP!
IMP:函数指针,保存了方法的地址!
SEL是通过表取对应关系的IMP,进行方法的调用!
2、获取SEL和IMP方法和调用:
SEL methodSel = @selector(str:); [self performSelector:methodSel withObject:nil];//方法的调用 NSLog(@"===%p",methodSel); IMP methodImp = [self methodForSelector:methodSel]; methodImp();//方法的调用 NSLog(@"===%p",methodImp);
- (void)str:(NSString *)str{ NSLog(@"执行str方法……ForeverGuard博客园"); }
显示结果:
3、通过反射获取方法名(包括class):
NSString *methodName = NSStringFromSelector(methodSel); NSLog(@"映射===%@",methodName); NSString *className = NSStringFromClass([Father class]); NSLog(@"映射===%@",className); Class FatherClass = NSClassFromString(className); NSLog(@"映射===%@",FatherClass);
显示结果:
ForeverGuard博客园