美文网首页
Runtime中涉及的常用数据

Runtime中涉及的常用数据

作者: 一切会变好 | 来源:发表于2020-08-09 20:58 被阅读0次

我们在研究Runtime的时候,会有一些基本数据类型的概念,时间久了,容易忘记,在此,进行记录。

>SEL

SEL 是 selector 在 Objc 中的表示,selector 是方法选择器,其作用就和名字一样,通过名字可以找到对应的方法实现。

代码中声明,如下

@property (nonatomic, assign) SEL selector;

>Id 和isa

id 是一个参数类型,它指向某个类的实例的指针。定义如下:

isa指针:指向对象所属的类,isa的值是class的地址。

>Method

Method 代表了某个方法的类型,结构如下:

>IMP

IMP 是一个函数指针,当我们发起一个 ObjC 消息之后,最终它会执行的那段代码,就是由这个函数指针指定的。即,IMP 函数指针指向对应方法的实现。

>Ivar

Ivar 用于表示成员变量的类型,结构如下:

char *ivar_name:变量名;

char *ivar_type:变量类型;

int ivar_offset:基地址偏移字节;

>Cache

Cache 主要为方法调用的性能进行优化,每当实例对象接收到一个消息时,它不会直接在 isa 指针 指向的类的方法列表中遍历查找能够响应的方法,而是优先在 Cache 中查找。

>Class

Class是一个类(也是一个对象,叫类对象,因为它继承至objc_object),对应runtime中objc_class的数据结构(是结构体)。

Class isa:指向元类的指针;

Class super_class:指向父类的指针;

const char *name:类名;

long version:版本号;

info:信息;

long instance_size:实例变量大小;

struct objc_ivar_list *ivars:所有的成员变量、属性的信息都放在链表 ivars 中,ivars 是一个数组,数组中每个元素是指向 Ivar(变量信息) 的指针;

struct objc_method_list **methodLists:存放了该类的所有成员(-)方法,类(+)方法存在 meta-class(元类) 的objc_method_list 链表中;

struct objc_cache *cache:用于缓存最近调用过的方法,每次调用一个方法后,该方法就会被缓存到 cache 列表中,下次调用的时候 runtime 会优先去 cache 中查找,如果没有,才去 methodLists 中接着查找方法,对于经常用到的方法调用,能提高效率;

struct objc_protocol_list *protocols:遵循的协议列表;

相关文章

网友评论

      本文标题:Runtime中涉及的常用数据

      本文链接:https://www.haomeiwen.com/subject/inrrdktx.html