OC语言--SEL

本文深入解析Objective-C中SEL数据类型的作用,包括如何将方法封装为SEL,SEL在方法调用过程中的角色,以及创建和使用SEL的过程。同时,文章解释了_objc_msgSend和 SEL 的联系,提供了创建SEL的多种方法,并强调了方法内部_cmd的用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SEL数据类型

1、我们常说对象发送消息,其实是对象在调用方法,那么对象是如何准确的调用方法的呢?
解释:[p test];当对象p发送一个test消息就是,调用test方法,其实其调用过程为:
1.把test方法包装成SEL类型的数据;
2.根据SEL数据找到对应的方法地址;
3.根据方法地址调用对应的方法test
2、为什么要包装为SEL类型的数据?
解释:类中包含的是方法列表,每一个方法列表都对应一个SEL数据,该SEL数据保存的是方法的地址,所以外界如果想调用方法需要找到该方法的地址,
而该方法的地址保存在SEL类型的数据中,所以对象调用方法需要借助SEL类型的数据。
二、创建SEL:
1. SEL s1 = @selector(test);    //test为方法名
2. SEL s2 = NSSelctorFromString(@"test2");    //test2为字符串
方法调用:
[p performSelector:@selector(test)];
[p performSelector:@selector(s2)];
[p performSelector:s1];
三、_cmd
其实每个方法内部都有一个内置的_cmd,_cmd代表当前方法,_cmd == @selector(test);
四、总结:
1.SEL其实是对方法的一种包装,将方法包装成一个SEL类型,去找对应的方法地址,找到方法地址就可以调用方法。
2.消息就是SEL
五、补充:
封装好的SEL类型数据在去类中查询方法对应的SEL时,第一次查找时逐行查找,一个一个的排查,直到找到位置,找到后就将该值存放在缓存中,当第二次查找该方法
是就可以直接拿取,而不用再逐个排查了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值