OC中的selector浅析之一

标签: selector
767人阅读 评论(0) 收藏 举报

选择器实质跟C语言的回调函数是一样的
例如下面一个例子

#import "Sum.h"

@implementation Sum
-(void)run{

    [self performSelector:@selector(sum:)];

}
-(void)sum:(NSString *)a{
    NSLog(@"你好");
}
@end

打印结果:
这里写图片描述

selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念。

@selector(xxxx)的作用是找到名字为xxxx的方法。一般用于[a performSelector:@selector(b)];就是说去调用a对象的b方法,和[a b];的意思一样,但是这样更加动态一些。@selector(xxxx)返回的类型是SEL,看方法说明的时候如果参数类型是SEL,那么就是要接受@selector(xxxx)返回的值的那种了。

在Objc中 SEL的定义是:
typedef struct objc_selector *SEL;
具体这objc_selector结构体是什么取决与使用GNU的还是Apple的运行时, 在Mac OS X中SEL其实被映射为一个C字符串,可以看作是方法的名字,它并不一个指向具体方法实现(IMP类型才是)。对于所有的类,只要方法名是相同的,产生的selector都是一样的。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
      个人说明

      以梦为马 不负韶华!


      - The king of Kings.


      人生伟业的建立,不在能知,乃在能行。


      青春不老,奋斗不止。
    个人资料
    • 访问:945231次
    • 积分:12624
    • 等级:
    • 排名:第1142名
    • 原创:330篇
    • 转载:66篇
    • 译文:15篇
    • 评论:410条
      技术地址
      微信公众号
      微信号
      QQ号
    博客专栏