SEL
1.SEL是一个返回方法名的类型,能得到方法名.
2.selector 有2重含义:
- 在源代码中代表向对象发送消息的方法名称。
- 在编译后它代表了方法名称被编译后一个统一的标识。
3._cmd当前的方法。NSLog(@"method = %@",NSStringFromSelector(_cmd));
4.[target performSelector:(SEL)];//起运行时调用方法的作用。系统先找方法名,再找地址,然后运行。
IMP
1.IMP是一个返回函数指针的类型,能得到方法的地址。
2.IMP imp = [target methodForSelector:(SEL))];//指针函数的声明
imp(target,(SEL));//起运行时调用方法的作用。找地址,然后运行。
Class
Class定义没定义好的类, id定义定义好的类。
Student.h
#import <Foundation/Foundation.h> @interface Student : NSObject -(void)study; @end
Student.m
#import "Student.h" @implementation Student -(void)study { NSLog(@"i am student,i study english"); NSLog(@"%@",NSStringFromSelector(_cmd)); } @end
AppDelegate.m
Student *s = [[Student alloc]init]; SEL methodName =@selector(study); NSString *string = NSStringFromSelector(methodName); NSLog(@"%@",string); //SEL method = NSSelectorFromString(string); if ([s respondsToSelector:methodName]) { [s performSelector:@selector(study)];//[s study]; } // IMP impStudy = [s methodForSelector:@selector(study)]; impStudy(s,@selector(study));//[s study];
http://www.cnblogs.com/kesalin/archive/2011/08/15/objc_method_base.html