黑马程序员-OC语言-SEL类型(听课笔记)
来源:互联网 发布:李晶团扇 淘宝店 编辑:程序博客网 时间:2024/05/21 22:26
------Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
1 、SEL类型
SEL:全称selector 一种用来表示方法名类型的数据类型(方法名)。SEL类型作用:
1)可以定义变量
2)可以用来作为方法的形参
3)可以用来作为方法的实参
类中方法存储的原理:
1)类里面的方法都是被转换成SEL变量进行存储的。
2)当类声明一个对象,对象调用方法的时候,系统会把这个方法转换成SEL,然后拿这个SEL到类方法中去匹配。
[d run]; ------->SEL
Person *p=[[Person alloc] init];
[p test];
寻找方法的过程:
(1)首先把test这个方法名包装成sel类型的数据;
(2)根据SEL数据找到对应的方法地址;
(3)根据方法地址调用相应的方法。
(4)注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用。
关于_cmd:每个方法的内部都有一个-cmd,代表着当前方法。
注意:SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,找到方法地址后就可以调用方法。这些都是运行时特性,发消息就是发送SEL,然后根据SEL找到地址,调用方法。
3)我们可以自己手动把方法转换成SEL,然后用这个SEL去查找方法。
Objetive-C中的Method结构
struct objc_method{
SEL method_name;//方法名
char *method_types; //方法地址
IMP method_imp; //方法地址(IMP)
};
typedef objc_method Method
什么是IMP
– IMP是”implementation”的缩写,它是objetive-C 方法 (method)实现代码块的地址,类似函数指针,通过它可以 直接访问任意一个方法。免去发送消息的代价。
获取方法的IMP
– -(IMP)methodForSelector:(SEL)aSelector;
SEL print_sel =NSSelectorFromString(@“print:”);//获得SEL
IMP imp=[person methodForSelector:print_sel];//得到IMP
imp(person,print_sel,@“*********”);//通过IMP直接调用方法
等效调用:[person print_sel:@“*********”];
– imp的第一参数是对象自己(self),第二参数是方法标示, 第三个是方法的参数
- 黑马程序员-OC语言-SEL类型(听课笔记)
- 黑马程序员-OC语言-动态类型和静态类型(听课笔记)
- 黑马程序员-OC语言-类方法(听课笔记)
- 黑马程序员-OC语言-封装的实现步骤(听课笔记)
- 黑马程序员-OC语言-依赖关系(听课笔记)
- 黑马程序员-OC语言-关联关系(听课笔记)
- 黑马程序员-OC语言-方法重载问题(听课笔记)
- 黑马程序员-OC语言-self和super关键字(听课笔记)
- 黑马程序员-OC语言-多态的实现(听课笔记)
- 黑马程序员-OC语言-类的本质(听课笔记)
- 黑马程序员-OC语言-@property增强使用(听课笔记)
- 黑马程序员-OC语言-Foundation框架(听课笔记)
- 黑马程序员-OC语言-OC多文件开发介绍(听课笔记)
- 黑马程序员-OC语言-关于OC中的static关键字使用(听课笔记)
- 黑马程序员-OC语言-面向对象编程概念(听课笔记)
- 黑马程序员-OC语言-类的声明和实现(听课笔记)
- 黑马程序员-OC语言-创建一个对象并访问成员变量(听课笔记)
- 黑马程序员-OC语言-无参方法声明实现及调用(听课笔记)
- 一位俄罗斯程序员移民美国的故事
- zend framework2-不同模块设置不同layout
- 黑马程序员--OC内存管理之循环retain问题
- 课程实训(猜猜看游戏)进度三
- 自定义ActionBar源码
- 黑马程序员-OC语言-SEL类型(听课笔记)
- malloc, realloc, calloc, alloca
- ios教程(3)--UIImageView、UILabel、UIButton实现一个小案例
- jsp (一)
- 用虚拟机安装、启动、停用hadoop2.6.0(实现hdfsHA和ResourceManagerHA)步骤小记
- 百度分页效果之纯jsp版
- 黑马程序员--有关OC内存管路set方法的思考
- 计算机专业英语教程(第二版)
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)