先看tomcat里用到的代码:

    //然后开始动画//把图片放到animationImages,接受数组参数self.tom.animationImages = arrayImage;//设置时间间隔,81张图,图多就播的时间稍微长,否则短self.tom.animationDuration = arrayImage.count * 0.074;//设置重复次数self.tom.animationRepeatCount = 1;//开始动画
    [self.tom startAnimating];//结束动画,应该等等再清空[self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration];

最后一句代码,延迟加载 set 方法的过程。@selector(xxxx)的作用是找到名字为xxxx的方法。就是说去调用a对象的b方法,和[a b];的意思一样,但是这样更加动态一些。返回的类型是SEL,看方法说明的时候如果参数类型是SEL,那么就是要接受@selector(xxxx)返回的值。

回忆:

objective-c 语法快速过(5)中的SEL数据类型

每个类的方法列表都存储在类对象中,每个方法都有一个与之对应的SEL类型的数据,根据一个SEL类型的数据就可以找到方法的地址,进而调用方法。SEL类型的定义:

typedef struct objc_selector *SEL;

SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法,其实发送的消息就是SEL。

具体这objc_selector结构体是什么,取决与使用GNU的还是Apple的运行时, 在Mac OS X中SEL其实被映射为一个C字符串,可以看作是方法的名字,它并不指向具体方法实现(IMP类型才是)。

对于所有的类,只要方法名是相同的,产生的selector都是一样的。

看官方文档;

- (id)performSelector:(SEL)aSelector

把指定的消息发送给接收方,饼返回执行的结果,也就是说 perform(本身就有履行执行的意思)Selector :xxx,是执行名字为 xxx 方法的方法,只不过是间接去执行,通过 sel 参数(使用@selector(方法的名字)的返回sel 类型),找到方法。

看到这里,发现@selector(methodName)非常类似 c 语言的函数指针的概念。

C语言中,可以把函数名直接赋给一个函数指针,而OC的类不能直接应用函数指针,这样只能做一个@selector语法来取.它的return结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)。

回忆函数指针:

函数也具有地址,指向函数的指针指向(保存)了函数代码起始处的地址,声明一个函数指针,必须先声明它指向的函数类型(返回类型和参量类型),声明指向函数的指针,函数指针可以作为另一个函数的参数,告诉第二个函数使用哪个函数。

    void ToUpper(char *);//先声明函数
……void (*p)(char *);//指针p是指向函数ToUpper的指针

即:(*p)也是一个函数,char*是它的参量,void是返回类型,表达式(*p)代替了函数名。因为*运算符优先级低于(),故必须加括号——(*p),省略掉圆括号意义就变了:

void  * p(char *);//意思是p是一个函数,返回一个空指针类型

声明了函数指针,则可以用函数名表示函数的地址,当然指针也可以。函数指针最普遍的用法,是作为函数参数. 且只能指向函数都是相同类型的,可以用函数指针作为函数的参数,也能用函数名作为参数(函数名看作是函数地址),不能有函数数组!但是可以有函数指针的数组

再看 oc,取得selector值.

//object-c的选择器
@interface method
-(int)add:(int) val;
@endSEL fun ; //相当于定义一个方法指针
fun = @selector(add:);

注意;

可以用字符串来找方法

SEL 变量名 = NSSelectorFromString(方法名字的字符串);

可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);

取得相应值后,怎么处理SEL值,这一点仍然与函数指针一样,就是执行它。SEL变量的执行,用performSelecor对象方法来执行.

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

selector的应用场合

是能让Objective-C动态调用方法的玩意.

是 object-c 的动态后绑定技术

可以通过字符串访问函数

selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。

objective-c中的@selector()和 c /c++的函数指针相关推荐

  1. C++中函数指针数组的使用

    C++中函数指针数组的使用 来源:电脑教程在线(http://www.linuxdiyf.com/1/) 作者:linux 原文:C++中函数指针数组的使用(http://www.linuxdiyf. ...

  2. C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)

    接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...

  3. Android中的Selector的用法

    Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist_vie ...

  4. Object-C 中的Selector 概念

    selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念. @selector(xxxx)的作用是找到名字为xxxx的方法.一般用于[a pe ...

  5. epoll 浅析以及 nio 中的 Selector

    转载自 epoll 浅析以及 nio 中的 Selector 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference): 首先我们来定义流的概念, ...

  6. epoll浅析以及nio中的Selector

    出处: https://my.oschina.net/hosee/blog/730598 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference) ...

  7. 【IOS】Object-C 中的Selector 概念

    在iphone程序中会大量看到@selector这样的用法.<<iphone开发基础>花了很大一个篇幅来解析这个语法,但是不知是翻译问题,还是解释过细,不大看得懂,很是不给力.直到程 ...

  8. activemq中的selector

    activemq中的selector Producer.java Consumer.java activemq消息中间件可以过滤消息,也就是selector,selector遵循sql 92语法.可以 ...

  9. Objective-C中,ARC下的 strong和weak指针原理解释

    Objective-C中,ARC下的 strong和weak指针原理解释 提示:本文中所说的"实例变量"即是"成员变量","局部变量"即是& ...

最新文章

  1. 三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)
  2. 又一道软通动力7K月薪面试题——银行业务调度系统
  3. 《系统集成项目管理工程师》必背100个知识点-32工作分解结构步骤
  4. 【字符串系列】字符串匹配中的位并行算法
  5. android数据绑定_Android数据绑定
  6. ios 给网页传值_ios常见的页面传值方式
  7. SQL Sever 2012学习总结之使用SQL语言创建数据库与表
  8. 15个数据可视化的绝妙案例
  9. 堆叠柱状图显示具体数据和百分比
  10. C++病毒-----------混乱鼠标
  11. 移动魔百盒CM311-3-YST-晨星MSO9385-语音首页正常-TTL刷机包
  12. 深入探索Android布局优化(上)
  13. 【书摘】深度学习简史(摘抄自《深度学习基础与应用》)
  14. 平安好医生发布半年报,“关键先生”方蔚豪寻求变阵|看财报
  15. JS之FormData对象
  16. ChinaRAP中国道路(路网)风险评估系统研究与应用
  17. 几种光纤接口(ST,SC,LC,FC)
  18. I - Keylogger Gym - 101078I——模拟队列+栈
  19. 计算机毕业设计asp.net的大学生交友网站(源码+系统+mysql数据库+Lw文档)
  20. Android开发丶基于mupdf在Android设备上横竖屏查阅pdf文件

热门文章

  1. jquery通过ajax方法获取json数据不执行success
  2. Python第二天(字典)
  3. Weblogic魔法堂:AdminServer.lok被锁导致启动、关闭域失败
  4. js 接收 json格式的字符串
  5. Goldengate实现在线数据迁移
  6. 表头样式_1分钟学会制作Word两栏、三栏表头
  7. Java项目性能监控和调优工具-Javamelody
  8. java wsdl反向生成源码,并使用CXF实现客户端调用代码
  9. 用tbody解决div在table标签里无法隐藏某些行
  10. 架构师必读!以图文的方式解锁 HTTPS原理,10分钟还原HTTPS真像!