在iphone程序中会大量看到@selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法,但是不知是翻译问题,还是解释过细,不大看得懂,很是不给力.直到程序用这个语法,并且仔细看了一些解析文章。才明白这一语法。
简而言之,你可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。
一.取得selector值.
C函数指针
int add(int val) { return val+1; }
int (* c_func)(int val);
//定义一个函数指针变量
c_func = add ;
//把函数addr地址直接赋给c_func
|
object-c的选择器,
@interface foo -(int)add:int val;
@end
SEL class_func ; //定义一个类方法指针
class_func = @selector(add:int);
|
注意1. @selector是查找当前类的方法,而[object @selector(方法名:方法参数..) ] ;是取object对应类的相庆方法.
注意2.查找类方法时,除了方法名,方法参数也查询条件之一.
注意3. 可以用字符串来找方法SEL 变量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);
二.执行selector值.
取得相庆值后,怎么处理SEL值呢,这一点仍然与函数指针一样,就是执行它
函数指针执行,(以下有几种等效形式)
*c_func(10);
c_func(10);
SEL变量的执行.用performSelecor方法来执行.
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
三.selector的应用场合
selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法很多开发环境用到。比如GTK,Delphi.基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。
转自:http://blog.chinaunix.net/uid-9935135-id-181872.html
分享到:
相关推荐
robot-cases-selector-plugin插件,使用指南请查看另一篇博客
Android-Ultra-Photo-Selector是一个多图片选择的开源框架,可以实现多图片的选择
Laravel开发-laravel-lang-selector Laravel创建智能多语言网站
关于XML绘图(bitmap ,shape ,layer-list ,selector ,animation)的demo
postcss前缀选择器 使用自定义命名空间.a => .prefix .a每个CSS选择器添加前缀。 目录 安装 $ npm install postcss-prefix-... exclude : [ '.c' ] , // Optional transform callback for case-by-case overrid
Android Multiple Images Selector Easy-to-use library to select images in Android application Features: select images by folders support to set max number of images to be selected allow filter images ...
前端开源库-stylelint-selector-bem-patternStylelint选择器BEM Pattern,一个利用PostSS BEM Linter功能的Stylelint插件
前端开源库-has-id-selector有ID选择器,检查CSS选择器字符串是否有ID。
前端开源库-css-selector-extractCSS选择器提取,从CSS代码中提取特定的CSS选择器
videojs-max-quality-selector Videojs插件可帮助您列出实时,自适应和渐进流中的分辨率和比特率。目录 minHeight :number showBitrates :boolean showSingleItemMenu :boolean 排序:number sortEnabled :boolean ...
Android-Ultra-Photo-Selector.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
playwright-query-selector-all方法详解
简单集成了Android-Ultra-Photo-Selector这个框架的使用,非常感谢作者,框架地址:https://github.com/AizazAZ/Android-Ultra-Photo-Selector
Laravel开发-aliyun-ems-selector 全国快速递查Laravel
MultiImageSelector是一个模仿微信的Android图片选择器类库,有选择单张图片和多张图片模式。还可以设置选择图片的最大数量。 适用eclipse版
前端开源库-matches-selector匹配选择器,检查一个DOM元素是否匹配一个给定的选择器,并提供适当的浏览器支持和单元测试。
版本6+的插件,在控制栏中添加了一个按钮,使用户可以从可用的视频质量或分辨率中进行选择。如何使用? 使用此插件需要三个主要步骤: , ,以及 。 有关每个步骤的信息,请参见以下内容。包含/要求使用[removed]...
playwright-relative-selector-源码.rar
Laravel开发-laravel-data-selector 在Laravel的雄辩之上有一个额外的层,帮助从数据库中选择和检索数据。
VP-UML Product Selector 10.0