SEL : 类成员方法的指针,但不同于C语言中的函数指针,函数指针直接保存了方法的地址,但SEL只是方法编号。

IMP:一个函数指针

IMP和SEL关系

每一个继承于NSObject的类都能自动获得runtime的支持。在这样的一个类中,有一个isa指针,指向 该类定义的数据结构体,这个结构体是由编译器编译时为类(须继承于NSObject)创建的.在这个结构体中有包括了指向其父类类定义的指针以及 Dispatch table. Dispatch table是一张SEL和IMP的对应表。(blog.csdn.net/fengsh998/a…)

也就是说方法编号SEL最后还是要通过Dispatch table表寻找到对应的IMP,IMP就是一个函数指针,然后执行这个方法

Q1:有什么办法可以知道方法编号呢

@selector()就是取类方法的编号。

SELmethodId=@selector(func1);

Q2:编号获取后怎么执行对应方法呢

[selfperformSelector:methodIdwithObject:nil];

Q3:有没有办法通过编号获取方法

NSString*methodName=NSStringFromSelector(methodId);

Q4:IMP怎么获得和使用

IMP methodPoint=[self methodForSelector:methodId];

methodPoint();

Q5为什么不直接获得函数指针,而要从SEL这个编号走一圈再回到函数指针呢?

有了SEL这个中间过程,我们可以对一个编号和什么方法映射做些操作,也就是说我们可以一个SEL指向不同的函数指针,这样就可以完成一个方法名在不同时候执行不同的函数体。另外可以将SEL作为参数传递给不同的类执行。也就是说我们某些业务我们只知道方法名但需要根据不同的情况让不同类执行的时候,SEL可以帮助我们。其他SEL的好处可以在评论中帮忙补充...

参考 :www.jianshu.com/p/4a09d5ebd…

转载于:https://juejin.im/post/5b9633a86fb9a05cff31f96c

iOS中的SEl和IMP到底是什么相关推荐

  1. iOS中的HotFix方案总结详解

    iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...

  2. Objective-C-- id、nil、Nil、SEL、IMP、Method、Class

    在Objective-C中,有一些我们之前并不熟悉但是经常见到的数据类型,比如id.nil.Nil.SEL等等.在很多文章里,我们都见过这些数据类型的介绍,但是都没有说的太清楚. 这篇文章从最底层的定 ...

  3. iOS中关于NSTimer使用知多少

    看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗? 我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到ru ...

  4. ios开发 ajax hook,IOS中的网络拦截总结

    因为业务场景需要,要求对App中网络请求进行拦截.这里包括原生网络请求和WebView里的网络请求.之前我们了解过原生网络请求的拦截是可以实现的,但是WebView中网络请求似乎还不太可能,所以抱着尝 ...

  5. iOS中的CADisplayLink定时器

    2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...

  6. [转] iOS中@class #import #include 简介

    [转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析        很多刚开始学习iOS开发的同学可能在看别人的代码 ...

  7. IOS中通知中心(NSNotificationCenter)的使用总结

    IOS中通知中心NSNotificationCenter应用总结 一.了解几个相关的类 1.NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量. 这个成员变量是这个消息对象 ...

  8. iOS中NSLog输出格式大全

    iOS中NSLog输出格式大全 1 // 2 // ViewController.m3 // NSLog日志输出格式大全4 // 5 // 6 // 7 // 8 9 #import "Vi ...

  9. c语言block内部的实现原理,iOS中block变量捕获原理详析

    Block概述 Block它是C语言级别和运行时方面的一个特征.Block封装了一段代码逻辑,也用{}括起,和标准C语言中的函数/函数指针很相似,此外就是blokc能够对定义环境中的变量可以引用到.这 ...

最新文章

  1. C# 语法练习(3): 运算符
  2. Android分享功能,微博、QQ、QQ空间等社交平台分享之入门与进阶
  3. 初学__Python——Python 可重用结构:Python模块
  4. 《罗辑思维》读书笔记及思维导图
  5. java类什么时候卸载_java – Android:什么时候类被系统卸载?
  6. 第十节:基于MVC5+Unity+EF+Log4Net的基础结构搭建
  7. win10看计算机属性,win10系统查看windows7版本号要比计算机属性具体的图文步骤
  8. c#-SimHash匹配相似-算法
  9. C#:winform开发的System.AccessViolationException错误,已解决
  10. [Python] 字典 get(key, default=None):获取字典中相应键的对应值
  11. Linux常用的网络服务基础命令
  12. c语言技术课第一次作业
  13. 10.24 cv方向3DMM必备环境——Windows10/11下pytorch3d[完美安装版]
  14. 如何使用MATLAB绘制出好看的火山图
  15. VSCODE mac版下载慢解决办法
  16. 2022 manjaro安装中文输入法
  17. 百钱百鸡:公鸡5元一只,母鸡3元一只,小鸡1元3只,100元要买100只鸡,共有几种情况
  18. php 微信开发实战pdf,微信开发实战之模块化的实例详解
  19. Python-Tkinter和PyInstaller简介及定时关机程序的简易实现
  20. axios 官方指南翻译

热门文章

  1. 左右声道测试音频_关于制作左右声道音频的剪辑软件推荐
  2. Python-EEG工具库MNE中文教程(1)-MNE中数据结构Raw及其用法简介
  3. 离开英伟达仅19个月,他交出了一块国产全功能GPU
  4. 全球最大AI巨量模型,参数2457亿炼丹16天专注中文,打造者绝对让你意外
  5. 未来,你或许会“咬牙切齿”地操纵手机
  6. 微软亲手盖上IE棺材板:明年6月停用,慢且不安全,还因垄断被罚款170亿
  7. OPPO这次的新旗舰,开始“搞颜色”了,当然不是外壳的那种
  8. 简单两步就能将 Laravel Log 信息发到其他平台上
  9. 吾八哥学Python(四):了解Python基础语法(下)
  10. MMD的unity导入插件