-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
Runtime 消息处理实际上可以分成三个阶段:
- 消息解析或者称为消息查找
- 消息决议(resolveMethod)
- 消息转发
消息查找,首先会先通过汇编指令查找objc_class中的cache里面的方法,之前使用过的方法都在里面,如果没有找到就会走到MethodTableLookup,也就是到_class_data_bits_t 下的class_rw_t 里面找,这里面汇聚了编译时候写到_DATA中的方法,class_ro_t中的方法,以及catogry中的方法。这里会顺着继承链一直找,直到找到根类为止,这个过程也是先找缓存再找方法列表,如果到根类为止都没找到就进入了方法决议,这时候会调用resolveInstanceMethod/resolveClassMethod方法,在这里我们还可以自己根据需要,动态给类添加方法,方法决议之后还会重新走一遍上面方法查找的流程,如果还没找到就会进入消息转发流程。
Metadata
Metadata
Assignees
Labels
No labels