id的本质

简介: id的本质

1.id的本质是什么?

说到id 就是跟SEL一样 id也被定义在Objc/objc.h目录下

typedef struct objc_object*id

说到id它是一个结构体指针类型,它可以指向Objective-C的中的任何对象.objc_object结构体

struct objc_object{Class isa OBJC_ISA_AVAILABILITY}

我们通常说的对象,就是长这个样子,这个结构体只有一个成员变量isa ,对象可以通过isa指针找到其所属的类,isa指针是一个class类型的成员变量.

说到class也是一个结构体指针类型

它的原型是这样的typedef struct objc_class *Class

class 也有一个isa指针,指向所属的元类(meta).

super _class 是指向超类

name: 是类名

version 是类的版本信息

info 是类的详情

instance_size 是指的该类的实例对象的大小

dinars指向该类的成员变量列表

methodLists: 指向该类的实例方法列表,它将方法选择器和方法实现地址联系起来,methodlists是指向objc_mthod_list指针的指针,也就是说可以动态的修改*methdLists 的值来添加成员方法,这也就是分类可以增加方法不可增加属性的原因了.

cache: Runtime系统会把调用的方法存到cache中(理论上将一个方法如果被调用者,那么它有可能今后还会被调用),下次查找的时候效率更高

protocols:指向该类的协议列表

也就是当我们调用一个方法时,其运行过程大致如下:

Rumtime系统会把方法调换转化为方法发送,就objc_megSend,并且把方法的调用者,和方法选择器,当做参数传递过去.

此时,方法的调用者会通过isa指针来找到其所属的类,然后在cache或者methodLists中查找该方法,找得到就会跳到对应的方法去执行.

如果在类中没有找到该方法,就会去super_calss父类里面找,一直找到NSObjc.没有找到就报错

内容参考自objc中国


相关文章
|
6月前
|
存储 NoSQL 数据库
全局id生成方式
全局id生成方式
|
缓存 运维 NoSQL
分布式ID生成方法的超详细分析(全)
目录前言1. UUID2. 数据库自增3. 数据库集群4. 数据库号段5. redis模式6. 雪花算法7. 其他总结 前言 关于什么是分布式ID 数据量不是很多的时候,单一个数据库表可以支撑其业务,即使数据在大也可以主从复制 到一定量的数据时,实现分库分表的时候,就需要一个全局唯一的ID,订单的编号就是分布式ID 关于上面牵扯到的主从复制 可看我之前的文章进行查缺补漏 关于主从复制的超详细解析(全) 关于数据库的分布式ID可看我之前在Mycat种提及到 具体都有如下: 在实现分库分表的情况下,数据库自增主
318 0
分布式ID生成方法的超详细分析(全)
|
1月前
|
Oracle Java 关系型数据库
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
@Id、@GeneratedValue的作用,以及@GeneratedValue的使用
|
1月前
|
Python
通过 type 和 object 之间的关联,进一步分析类型对象
通过 type 和 object 之间的关联,进一步分析类型对象
53 3
|
2月前
|
数据库 Python
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
|
3月前
|
监控 UED
深入理解Call-ID头字段的重要性
【8月更文挑战第24天】
175 0
|
6月前
|
JavaScript 算法
v-for中key的原理和作用
为什么在使用v-for循环渲染列表时,应始终为每个列表项提供一个唯一的key属性? `使用v-for时加上key属性是为了提高渲染列表时的性能和效率。`
|
6月前
|
算法 NoSQL 关系型数据库
9种 分布式ID生成方式
9种 分布式ID生成方式
519 0
|
存储 算法 安全
场景应用:id全局唯一且自增,如何实现?
场景应用:id全局唯一且自增,如何实现?
190 0
|
SQL 数据采集 NoSQL
One ID中的核心技术ID-Mapping究竟是怎么实现的?
One ID中的核心技术ID-Mapping究竟是怎么实现的?