iOS runtime运行机制

1.RunTime概念

RunTime简称运行时,就是系统在运行的时候的一些机制。对于C语言而说,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,但是对于OC来说,函数的调用指的是消息发送,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数进行调用。

消息发送的步骤:

1.通过obj的isa指针找到obj对应的class,在class中的cache通过SEL查找对应的method,如果找到了通过method中的指针跳转到对应的函数中执行,否则进入2;

2.若在cache中没有找到,则去methodList中去查找,如果找到了通过method中的指针跳转到对应的函数中执行,否则进入3;

3.若在methodList也没有找到的话,则去superClass中去查找,若果找到了通过method中的指针跳转到对应的函数中执行,否则进入4;

4.如果找到了通过method中的指针跳转到对应的函数中执行,则将method加入到cache中,以便下次查找。

2.RunTime中的具体实现

a.OC的变量调用在RunTime中具体实现

a)OC调用PPMember的属性变量

PPMember.name

b)在编译的时候RunTime会这样找到name

Ivar *ivar = class_copyIvarList([PPMember class],&count);

const char *varName = ivar_getName(var);

b.OC的方法调用在RunTime中具体实现

a)OC中调用一个方法

[self  setUI];

b)在编译的时候RunTime会将上述代码转化成

objc_msgSend(self,@selector(setUI));

3.RunTime的常见作用

a)动态的添加对象的成员变量和方法;

b)动态交换两个方法的实现;

c)实现分类并添加属性;

d)实现NSCoding的自动归档喝解档;

e)实现字典转模型的自动转换。

4.代码实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值