关于SEL和IMP

1.SEL的基本特点

在内存中每个类的方法都存储在类对象中

每个方法都有一个与之对应的SEL类型的数据

根据一个SEL数据就可以找到对应的方法地址,进而调用方法

SEL类型的定义:  typedef struct objc_selector * SEL


2.SEL对象的创建

SEL s1 = @selector(test1); // 将test1方法包装成SEL对象

SEL s2 = NSSelectorFromString(@"test1"); // 将一个字符串方法转换成为SEL对象


3.SEL和IMP的区别

SEL是一个方法的编号   IMP是函数指针,直接获取函数的内存地址

两者的关系在于在类对象的数据结构中,其存储的实例方法列表(dispatch table)就是用SEL和IMP作为映射关系存在的(其实SEL为整形,其与实例方法有一个表的对应关系,在映射到IMP)。通过SEL和IMP的关系,可以通过runtime动态修改其对应关系,进一步修改方法的实现。


4.关于iOS类的继承关系图


继承关系图


图中包括三种对象,实例对象,类对象,元类对象

所有的对象均继承于自己的父类,NSObjec 是根类 其继承关系为nil

实例对象的ISA指针指向类对象,类对象的ISA指针指向元类,元类的ISA指针均指向根源类,根源类的ISA指针也指向自己

类对象存储 普通成员变量与普通成员方法(-开头的方法)

元类对象  存储类的static类成员变量与static类成员方法(+开头的方法),在类方法中self关键字代表的是这个类,以self点语法是获取不到其属性的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,883评论 0 9
  • 一、Runtime简介 Runtime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...
    林安530阅读 4,687评论 0 2
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 6,471评论 0 9
  • 本文转载自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex阅读 4,185评论 0 1
  • 曾经像一头野兽喜欢游荡 从遇见你就想守在你身旁 哪怕如今的你变成了雕像 不能再感受我温柔和忧伤 余生风吹雨打日晒 ...
    墨染岚城阅读 2,425评论 0 0

友情链接更多精彩内容