iOS Runtime

场景

编译时将源代码编译成机器语言(如汇编代码),最终生成二进制代码。
OC是一门动态语言,有些类、成员变量以及方法实现在编译时并没有确定,而是推迟到运行时才决定的。运行时系统可以用来解决编译后的代码,确定最终类型和实现。
Runtime就是一套C语言API。

探寻

实例方法&类方法

实例方法存在于类的方法列表中,类方法存在于元类方法列表中。
实例对象是类的实例,类对象是元类对象的实例。

Runtime 应用

给分类添加属性

给分类添加属性时,系统只会声明get、set方法,不会帮我们实现,因此想要实现我们可以借助runtime的API来实现。
具体实现参考:
iOS Runtime之给分类添加属性

消息转发流程

就是方法在调用时,执行的一系列流程。包含方法缓存、方法列表、动态解析、快速转发、常规转发等。
具体实现参考:
iOS Runtime之消息转发

序列化与反序列化

序列化与反序列化可以通过runtime获取属性名称,通过kvc实现设置属性的值。
具体实现参考:
iOS Runtime之序列化与反序列化

给原方法增加其他功能实现

即方法交换时调用原方法的实现,而因为交换方法后,原方法的实现对应方法名称为当前方法名称,因此只需调用自身方法名一次即可。
1. 方法交换在+load方法中调用,让方法交换只执行一次。
2. 方法交换不是必须在+load方法中进行的,+load方法执行环境决定了它比较适合做方法交换。
3. +load方法在程序启动时调用一次,分类的+load方法调用顺序取决于编译顺序。
具体方法交换实现参考:
iOS Runtime之方法交换

动态创建类

通过Runtime运行时特性,动态创建类,添加成员变量与方法。
具体实现参考:
iOS Runtime之动态创建类

其他

暂时没有了,有的话再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinxin_0

带我喝杯茶~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值