Skip to content

说一下 Runtime 消息解析。 #53

@tbfungeek

Description

@tbfungeek

Runtime 消息处理实际上可以分成三个阶段:

  • 消息解析或者称为消息查找
  • 消息决议(resolveMethod)
  • 消息转发

消息查找,首先会先通过汇编指令查找objc_class中的cache里面的方法,之前使用过的方法都在里面,如果没有找到就会走到MethodTableLookup,也就是到_class_data_bits_t 下的class_rw_t 里面找,这里面汇聚了编译时候写到_DATA中的方法,class_ro_t中的方法,以及catogry中的方法。这里会顺着继承链一直找,直到找到根类为止,这个过程也是先找缓存再找方法列表,如果到根类为止都没找到就进入了方法决议,这时候会调用resolveInstanceMethod/resolveClassMethod方法,在这里我们还可以自己根据需要,动态给类添加方法,方法决议之后还会重新走一遍上面方法查找的流程,如果还没找到就会进入消息转发流程。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions