Runtime了解?说下项目中什么地方用到Runtime?

2019-08-13  本文已影响0人  Peanut_S1

OC利用Runtime运行时变成一门动态语言

Runtime中的可以解决的问题:
1.为分类增加属性
常规定义 @property,编译器会为我们做3个处理:
生成实例变量_ property
生成getter和setter
但是分类中并不会去帮我们实现这些,所以通过关联对象去将键值关联到对象上面去
示例代码如下:

@property (nonatomic, strong) NSString *title;

4.不仅如此,还可以实现消息消息转发的机制
oc 通过obj_message的方式发送消息的,当对象收到无法处理的消息的时候,会执行消息转发,转发的步骤如下:
1.调用resolveInstanceMethod 方法,实现动态方法解析。这里会给类使用class_addMethod 来增加方法的机会。
2.如果没有实现动态方法解析,可调用 forwardingTargetForSelector 方法,看是否有备用接收者,将消息转发给备用接收者处理。
3.如果没有对象来接受此消息,处理不了了,就转发出去。
调用 methodSignatureForSelector 和 forwardInvocation 方法,进行完成的消息转发

如果经过上面三个步骤,还不能正确处理消息,程序就会走 doesNotRecognizeSelector 方法,crash 掉。

上一篇下一篇

猜你喜欢

热点阅读