runtime(一)------类结构,方法结构,方法缓存等

编写代码--------编译连接---------运行
(1)OC的动态性都是靠runtime的API支撑的。
(2)isa指针isa详解
实例对象的isa指针指向类对象,类对象的isa指针指向元类对象,元类对象的isa指针指向根类元类(如何指向请查看)
如图

(3)类结构(方法如何存放在类结构中)
其中,rw_t中的method_list等都是二维数组method_list_t **或者method_array_t 和property_list_t **或者property_array_t,有ro_t中的方法和分类,协议等中的方法
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)method_t
types:v16@0:8 返回值和参数类型
types对应表
在这里插入图片描述
例如:- (int) test: (int)age height: (float)height;
@“i24 @0 : 8 i16 f 20”
i表示返回值int的i;20代表所有参数的所占内存( id 8 sel8 int4 height4)
@第一个参数self;0从第零个字节开始
:sel方法名,从第八个字节开始,因为前面有占8位的self
(每个方法默认第一个参数是self,第二个是sel)
iage,int类型,从16开始
f20同上

(5)方法缓存
cache_t;
顾名思义,第一次调用某个方法从method_list中找,找到了调用,然后放入cache_t;下次又调用该方法直接从cache_t查找
如果调用父类的方法,去自己缓存找,找不到;去自己方法列表,找不到;去父类缓存,找不到,去父类方法列表,找到后调用,然后缓存到自己的类的缓存中。
在这里插入图片描述

在这里插入图片描述
如何将方法缓存到cache_t; key&_mask得到索引,存储到索引位置,前面的内存浪费掉
在这里插入图片描述
在cache _t中如何查询
key & _mask = 在散列表_buckets中的索引,直接取出
在这里插入图片描述

当两个不同的key&_mask 得到的索引相同时,后者-1,直到减到0,将i变为mask重来;
索引减一的操作

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值