在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库之间对象,控制之间通讯都是在这个基础构建的。

【IOS】Object-C 中的Selector 概念相关推荐

  1. Object-C 中的Selector 概念

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

  2. 2021年大数据ELK(五):Elasticsearch中的核心概念

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Elasticsearch中的核心概念 一.索引 index 二 ...

  3. iOS标准库中常用数据结构和算法之内存池

    上一篇:iOS标准库中常用数据结构和算法之位串 ⛲️内存池 内存池提供了内存的复用和持久的存储功能.设想一个场景,当你分配了一块大内存并且填写了内容,但是你又不是经常去访问这块内存.这样的内存利用率将 ...

  4. iOS网络开发中的同步、异步和请求队列

    在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...

  5. iOS开发 Xcode8中遇到的问题及改动

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1. ...

  6. Object Pascal 中类型

    Object Pascal 中类型的一些注意 2010-04-16 14:15 --------------------------------------------------------- 原创 ...

  7. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  8. epoll 浅析以及 nio 中的 Selector

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

  9. 初学者Web介绍一些前端开发中的基本概念用到的技术

    Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术. ...

最新文章

  1. 交叉熵理解深度学习互信息
  2. 这份GitHub万星的机器学习算法面试大全请大家注意查收
  3. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)
  4. C# System.Runtime.InteropServices 相关学习总结
  5. 用矩阵内积的办法构造迭代次数受控的神经网络1:0.6:0.1=4:3:2
  6. TCP/IP / TIME_WAIT 状态的作用 / MSL、TTL、RTT
  7. java插件技术_idea 好用的java插件
  8. python 清空所有对象_学习python第38天
  9. ajax提交file空指针,excel导入上传文件报空指针错误
  10. 2012-1-31学习日记
  11. 【Prison Break】第三天(3.29)
  12. express 4.x 获取post提交的数据
  13. 最新AxureUX WEB端交互原型通用组件模板库 组件仍然是这套作品的核心内容,这套作品的组件由通用组件、数据录入、数据展示、信息反馈
  14. 快速获取知网,万方,维普等永久性免费下载权限
  15. hashcat在windows上的安装与简单使用
  16. 富爸爸穷爸爸-罗伯特.清崎 pdf下载与思维导图
  17. 在excel中如何筛选重复数据_Excel如何快速筛选
  18. Python(七)之邮件处理
  19. android 联想云盘,附文:联想云盘安装_联想 小新Air 12 LTE版_笔记本评测-中关村在线...
  20. php 中断请求,PHP 信号中断系统

热门文章

  1. Keil MDK破解过程详解
  2. IT 技术学习资料分享
  3. 个人博客制作——首页部分
  4. 服务器主机型号,服务器的主机型号
  5. Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)
  6. html大文件传输思路
  7. 程序设计入门C语言 --- 素数和
  8. hibernate基础(十四):二级缓存
  9. Android果冻效果(阻尼动画)
  10. Warmup预热学习率