运行时(runtime)
运行时是OC的重要特性,也是OC动态性的根本支撑。动态,如果利用好了,扩展性就很强。当然了,OC的动态性只能算是一个一般水平。与swift、java这种强类型校验的语言相比,OC动态性很强,和js这种纯动态的语言(随时给类增加函数、属性)相比,OC的动态性就弱很多。动态,可以帮助我们在运行时修改类的属性、函数、甚至创建一个新类
相关知识点
消息机制
OC中的方法调用、属性读写等都是通过消息机制来处理的,当我们调用一个方法时,其实是向那个实例发送了一个消息(包含类方法,类本身是Class的实例)。所以后面的一些功能特点其实也使用了消息机制的特性,这里我们主要说说消息转发。
OC的函数调用实际上发送了一条消息,那调用过程就是消息处理过程,首先从类方法或者实例方法列表中获取你要调用的方法,如果没找到就进入转发流程。转发流程中预留了可扩展的点,大致过程是这样的
- 动态解析,此过程如果正确添加了方法就执行方法并结束转发,否则继续下面的步骤
- 备用接收者,转发给其他类/实例,如果不转发,则继续下面的步骤
- 完整转发,获取方法签名并转发,如果正确设置了签名并转发则结束,否则继续
- 调用未找到方法函数并抛出异常
动态解析
类方法动态解析(resolveClassMethod)
+ (BOOL)resolveClassMethod:(SEL)sel {
NSString *selName = NSStringFromSelector(sel);
NSLog(@"%s : %@", __func__, selName);
if (sel == @selector(greet)) {
// 动态添加 +greet 方法

最低0.47元/天 解锁文章
519

被折叠的 条评论
为什么被折叠?



