SEL类型

来源:互联网 发布:农村淘宝地址查询 编辑:程序博客网 时间:2024/06/01 16:16

什么是SEL类型?
1.SEL类型代表着方法的签名,在类对象的方法列表中存储着该签名与方法代码的对应关系;
2.每个类的方法列表中都存储在类对象中
3.根据一个SEL对象就可以找到方法的地址,进而调用方法;
4.SEL定义:
typedef struct objc_selector *SEL;
[p test];
将test包装成sel类型的数据

Person.h@property int age;main.m中:SEL sel=@selector(setAge:);Person *p=[Person new];//判断有没有开头的-方法//如果实现了setAge方法,就会返回YESBOOL flag=[p respondsToSelector:sel];NSLog(@"flag=%i",flag); //flag=1

//如果是通过类来调用,那么会判断有没有实现+开头的方法,如果是对象调用,就会判断有没有实现-开头的方法

第二个作用:

SEL sel2=@selector(demo);Person *p=[Person new];//调用p对象中的sel类型的方法//没有参数的情况下[p performSelector:sel2];//有参数的情况下(方法的形参必须接受的是一个对象)[p performSelector:sel withObject:@"138383838"]; //一个参数[p performSelector:sel withObject:@"138383838" withObject:@"abcdg"];

第三个作用:
调用传入对象的指定方法

Person.m-(void)makeObject:(id)obj andSel:(SEL)sel{    [obj performSelector:sel];}main.m中Car *c=[Car new];SEL sel=@selector(run);Person *p=[Person new];[p makeObject:c andSel:sel];
原创粉丝点击