SEL类型

什么是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方法,就会返回YES
BOOL 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];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值