iOS中SEL和IMP
来源:互联网 发布:安全数据库 编辑:程序博客网 时间:2024/06/05 21:16
我们有时在写iOS程序或者看一些框架代码时会看到SEL和IMP的方法,那这两个到底是什么呢?
SEL:类成员方法的指针,但是不同于C语言的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号;
IMP:一个函数指针,保存了方法地址;
SEL和IMP的关系
每一个继承于NSobject的类都能自动获的runtime的支持,在这样的类中,有一个isa指针,指向该类定义的数据结构体,这个结构体是编译器编译时为类创建的.在这个结构体中包括了指向其父类类定义的指针及Dispatch table,Dispatch table 是一张SEL和IMP的对应表(可以参考:(http://blog.csdn.net/fengsh998/article/details/8614486)) ; 也就是说方法编号SEL最后还要通过Dispatch table表找到对应的IMP,IMP是一个函数指针,然后去执行这个方法;
为什么不直接获得函数指针,而要从SEL这个编号走一圈再回到函数指针呢?
有了SEl的这个中间过程,可以对一个编号和什么方法映射做些操作,也就是说一个SEL可以指向不同的函数指针,这样就完成可以一个方法名在不同时候对应不同的函数体;另外可以将SEL作为参数传递给不同的类执行.也就是说某些业务我们 只知道方法名但是要根据不同情况让不同的类执行的时候,SEL可以帮助我们.写了一个简单的demo如下:
先写了一个字典数组,
self.arryList =@[@{@"title":@"第一个view",@"sel": NSStringFromSelector(@selector(fristview))},
@{@"title":@"第二个view",@"sel":NSStringFromSelector(@selector(secondview))},
@{@"title":@"第三个view",@"sel":NSStringFromSelector(@selector(thirdview))},
@{@"title":@"第三个view",@"sel":NSStringFromSelector(@selector(thirdview))},
@{@"title":@"第四个view",@"sel":NSStringFromSelector(@selector(fourview))},
@{@"title":@"第五个view",@"sel":NSStringFromSelector(@selector(fiveview))},
@{@"title":@"第六个view",@"sel":NSStringFromSelector(@selector(sixview))}
];
然后给页面加载一个tableview,对应代理方法中,
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//取类方法的编号
SEL selector =NSSelectorFromString(self.arryList[indexPath.row][@"sel"]);
//IMP获得
IMP imp = [selfmethodForSelector:selector];
void (*func)(id,SEL) = (void *)imp;
//IMP使用
func(self,selector);
}
这样就能实现一个简单的加载cell和点击cell跳转页面了本文只是简单介绍SEL和IMP的理解和简单应用,如有不对之处欢迎指正...
- iOS中SEL和IMP
- iOS中的SEl和IMP到底是什么
- iOS中的SEl和IMP到底是什么
- SEL和IMP
- SEL和IMP
- SEL和IMP
- SEL、IMP和Class
- IMP 和 SEL 区别
- SEL和IMP
- objc/runtime中SEL、IMP和method动态定义
- objc/runtime中SEL、IMP和method动态定义
- 黑马程序员-------OC----SEL和IMP
- iOS学习(二十一)Objective-C SEL和IMP类型
- 【Android基础学IOS开发】BOOL SEL IMP isa
- ios中SEL ( @selector() )简析
- description 方法 和 SEL - iOS
- @class SEL IMP
- Method,SEL,IMP
- 详解http和https的作用与区别
- linux安装jdk之后,系统默认使用openjdk解决方法
- 【机器学习实战-python3】使用Apriori算法进行关联 分析
- ACM-二分贪心D-04
- FPGA作业_阶段一
- iOS中SEL和IMP
- html和xml的区别
- (13.1.3.1)PMBOK之三:十大知识领域之整合管理
- React Native 嵌入到iOS原生应用
- 自动化用到的一些小技巧
- POJ 1679:The Unique MST(次小生成树)
- 剑指offer-面试题 20:顺时针打印矩阵
- C++作业5
- Java将远程服务器上的文件经过本地服务器中转后输出至前端