本文主要是介绍OC基础-SEL解析14,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.什么是SEL
SEL 全称叫做 selector 选择器.
SEL 是1个数据类型. 所以要在内存中申请空间存储数据.
SEL其实是1个类. SEL对象是用来存储1个方法的.
2. 类的存储方式
类是以Class对象的形式存储在代码段之中.
类名:存储的这个类的类名. NSString
还要将方法存储在类对象之中.如何将方法存储在类对象之中.
1). 先创建1个SEL对象.
2). 将方法的信息存储在这个SEL对象之中.
3). 再将这个SEL对象作为类对象的属性.
3. 拿到存储方法的SEL对象.
1). 因为SEL是1个typedef类型的 在自定义的时候已经加*了.
所以 我们在声明SEL指针的时候 不需要加*
2). 取到存储方法的SEL对象,
SEL s1 = @selector(方法名);
4. 调用方法的本质.
[stu1 sayHi];
内部的原理:
1). 先拿到存储sayHi方法的SEL对象,也就是拿到存储sayHi方法的SEL数据. SEL消息.
2). 将这个SEL消息发送给stu1对象.
3). 这个时候,stu1对象接收到这个SEL消息以后 就知道要调用方法
4). 根据对象的isa指针找到存储类的类对象.
5). 找到这个类对象以后 在这个类对象中去搜寻是否有和传入的SEL数据相匹配的.
如果有 就执行 如果没有再找父类 直到NSObject
OC最重要的1个机制:消息机制.
调用方法的本质其实就是为对象发送SEL消息.
[stu1 sayHi]; 为stu1对象发送1条sayHi消息.
5. 重点掌握:
1).方法是以SEL对象的形式存储起来.
2).如何拿到存储方法的SEL对象.
6. 手动的为对象发送SEL消息.
1). 先得到方法的SEL数据.
2). 将这个SEL消息发送给p1对象.
调用对象的方法 将SEL数据发送给对象.
- (id)performSelector:(SEL)aSelector;
Student *stu1 = [Student new];
SEL s1 = @selector(sayHi);
[stu1 performSelector:s1]; 与 [p1 sayHi]效果是完全一样的.
3). 调用1个对象的方法有两种.
1). [对象名 方法名];
2). 手动的为对象发送SEL消息.
7. 注意事项:
1). 如果方法有参数 那么方法名是带了冒号的.
2). 如果方法有参数,如何传递参数.
那么就调用另外1个方法.
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
3). 如果有多个参数
把参数封装到对象里
这篇关于OC基础-SEL解析14的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!