2019独角兽企业重金招聘Python工程师标准>>>

SEL类型

1 id cattle[3]; 
2 SEL say; 
3 SEL skin;

其中id cattle[3]定义了一个数组用于存储Cattle或者Bull对象。这一行代码估计大家都很熟悉,笔者就不赘述了。像这样的传统的数组并不能完全满 足我们的需求,当我们需要做诸如追加,删除等操作的时候,会很不方便。在随后的章节里面笔者将要向大家介绍传统数组的替代解决方案NSArray。

上一段代码的第二行和第三行是本节所关注的,就是SEL类型。Objective-C在编译的时候,会根据方法的名字(包括参数序列),生成一个用 来区分这个方法的唯一的一个ID,这个ID就是SEL类型的。我们需要注意的是,只要方法的名字(包括参数序列)相同,那么它们的ID都是相同的。就是 说,不管是超类还是子类,不管是有没有超类和子类的关系,只要名字相同那么ID就是一样的。除了函数名字和ID,编译器当然还要把方法编译成为机器可以执 行的代码,这样,在一个编译好的类里面,就产生了如下图所示方法的表格示意图(本构造属于笔者推测,没有得到官方证实,所以图5-2为示意图仅供参考,我 们可以暂时认为是这样的)。

图5-2,方法的表格示意图

请注意setSkinColor后面有一个冒号,因为它是带参数的。由于存在这样的一个表格,所以在程序执行的时候,我们可以方便的通过方法的名字,获取到方法的ID也就是我们所说的SEL,反之亦然。具体的使用方法如下:

1 SEL 变量名 = @selector(方法名字); 
2 SEL 变量名 = NSSelectorFromString(方法名字的字符串); 
3 NSString *变量名 = NSStringFromSelector(SEL参数);

其中第1行是直接在程序里面写上方法的名字,第2行是写上方法名字的字符串,第3行是通过SEL变量获得方法的名字。我们得到了SEL变量之后,可以通过下面的调用来给一个对象发送消息:

[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];

这样的机制大大的增加了我们的程序的灵活性,我们可以通过给一个方法传递SEL参数,让这个方法动态的执行某一个方法;我们也可以通过配置文件指定需要执行的方法,程序读取配置文件之后把方法的字符串翻译成为SEL变量然后给相应的对象发送这个消息。

转载于:https://my.oschina.net/rareliu/blog/32009

Objective-C选择器 Selector相关推荐

  1. java nio channel原理_Java NIO 选择器(Selector)与通道(Channel) 原理 | 学步园

    NIO底层实现poll, epoll(jdk1.5update 9  和jdk1.6  仅限于 linux 2.6以上 ) Java NIO 选择器(Selector) 知识预备 (linux epo ...

  2. Flume-NG源码阅读之SourceRunner,及选择器selector和拦截器interceptor的执行

    在AbstractConfigurationProvider类中loadSources方法会将所有的source进行封装成SourceRunner放到了Map<String, SourceRun ...

  3. 【Netty】NIO 选择器 ( Selector ) 通道 ( Channel ) 缓冲区 ( Buffer ) 网络通信案例

    文章目录 I . NIO 通信 服务器端 流程说明 II . NIO 通信 服务器端代码 III . NIO 通信 客户端 流程说明 IV . NIO 通信 客户端代码 V . NIO 通信 示例运行 ...

  4. 【Netty】NIO 选择器 ( Selector ) 简介

    文章目录 I . 选择器 ( Selector ) II . 选择器 ( Selector ) 与 NIO 特性 III . 选择器 ( Selector ) API 简介 IV . Selectio ...

  5. 【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )

    文章目录 I . NIO 模型 II . NIO 三大组件交互流程 III . NIO 缓冲区 IV . NIO 与 BIO 对比 V . NIO 线程分配 VI . 缓冲区 ( Buffer ) 示 ...

  6. Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数指针

    5,Class类型,选择器Selector以及指针函数 系列讲座有着很强的前后相关性,如果你是第一次阅读本篇文章,为了更好的理解本章内容,笔者建议你最好从本系列讲座的第1章开始阅读,请点击这里 . 上 ...

  7. html选择器selector,网页解析神器-Selector选择器全面解析

    大部分人可能喜欢使用以下三个解析器对网页进行解析: BeautifulSoup:使用方便,支css选择器,但它有个不可忽视的缺点:慢. lxml解析库:采用xpath解析,速度快. pyquery:它 ...

  8. netty:NIO模型--选择器(Selector)

    1. java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个的客户连接,就会使用到Selector(选择器). 2. Selector能够检测多个注册的通道上是否有事件发生(注意: 多个Cha ...

  9. java nio epoll_Java NIO 选择器(Selector)的内部实现(poll epoll)

    http://blog.csdn.net/hsuxu/article/details/9876983 之前强调这么多关于linux内核的poll及epoll,无非是想让大家先有个认识: Java NI ...

  10. 背景选择器selector替换按钮默认背景

    一.效果 正常状态 获取焦点或按下 按钮的背景图片是.9图,.9图的制作过程,见下面博文 http://blog.csdn.net/zengmingen/article/details/5019324 ...

最新文章

  1. JSON API免费接口
  2. layui轮播图切换会有跳动_Layui中轮播图切换函数说明
  3. 一篇搞懂mysql中的索引(大白话版)
  4. 信息学奥赛一本通(1072:鸡尾酒疗法)
  5. 查找路径php.ini文件到底在哪里?
  6. HDU 4990 Reading comprehension
  7. sun java认证真题,sun scjp考试心得_java认证
  8. 综述:目标检测二十年(2001-2021)
  9. 计算机ram和rom的工作原理,RAM和ROM的作用与区别详细说明
  10. MySQL(六):InnoDB数据文件
  11. 微信公众号开发——实现用户微信网页授权流程
  12. 2020第十一届蓝桥杯7月份省赛真题(JavaB组题解)
  13. 编写一程序从键盘输入圆锥体的半径r 高度h 并计算其体积
  14. Multimap运用
  15. 【从零开始学极狐gitlab】07作业关键字allow_failure、when、timeout(二) #JIHULAB101
  16. akka 与kafka
  17. APA规划和控制算法开发遇到的问题及解决方案
  18. 公司域名到期时间查询
  19. VirtualBox找不到桥接网卡问题解决
  20. AndroidX深入浅出Jetpack全面介绍

热门文章

  1. AndroidStudio安卓原生开发_Activity的启动方法_隐式启动2种方法_activity关闭---Android原生开发工作笔记83
  2. 快速开发框架工作笔记001---项目开发中整理_整合好的_springcloud快速开发框架_springcloud框架_springcloud架构
  3. Netty工作笔记0025---SocketChannel API
  4. STM32工作笔记0030---编写跑马灯实验--使用库函数
  5. 2015年6月24日日报
  6. 随想录(形式化验证小结)
  7. linux console下的贪吃蛇游戏
  8. Android九宫格闪烁,js实现九宫格点击按钮随机三个格子闪烁,发生错误
  9. linux如何运行python_[TimLinux] Python如何运行程序
  10. type=radio增加onclick没有效果_佳能6d+小痰盂镜头,加1张餐巾纸拍摄花卉,朦胧美效果你喜欢吗?...