我所知道的 iOS - RunTime
RunTime 即运行时, 主要是解决 APP 在运行期间如何找对方法实现的问题. Objective-C 是一门动态语言, 可以理解为 APP 运行期间拥有动态定位到具体代码块的能力.
WHY
要从 iOS 中的基本对象 NSObject 中寻找答案.

NSObject 中只有一个参数: Class isa. Class 是一个结构体: struct objc_class, 这个结构体在 OC 2.0 中只有一个参数, 也是 Class isa. 这个 isa 就如上图中继承链的描述一样, 实例 isa 指向类, 类 isa 指向父类 isa, 父类 isa 指向元类 isa. 所以实例即使没有声明方法, 也能使用父类的方法.

还没到核心. 可以看到 OC 2.0 之前, 有些参数是公开的. 从 ivars 开始看起, ivars 指成员变量地址列表, methodLists 指方法地址列表, cache 指调用过的方法的缓存列表, protocols 指协议列表.
这些列表都是 struct 结构体, 他们基本上是字典型的结构体. methodLists 就是{method_name : memory_address} 样的结构体. (大意如此) 所以一个对象被创建时, 它的方法地址才会被确定.
再来就是调用它的瞬间, iOS 中要调用方法, 使用的底层函数是 msg_send(id , SEL) 这个方法. msg 是 message 的缩写, 所以 iOS 调用方法也叫发送消息, 向一个 id 类型的对象发送 SEL 类型的消息. SEL 是 selector 的缩写, 从常用的方法 performSelector 中可以推断出, SEL 实际是一个字符类型的数据.

So, 结合 SEL 以及 methodLists, 就可以通过消息发送来找到具体的代码内存地址, 从而执行该方法.(实际是生成了 IMP 并调用它)
HOW - 消息发送流程

这时方法定义的结构体, SEL 已经清楚了, method_types 从命名能看出是方法的参数类型. 剩下 IMP , 在 DOC 中的描述是
A pointer to the start of a method implementation.
id (*IMP)(id, SEL, ...)
即 IMP 是一个指向方法实现的指针(函数指针).
消息转发机制
由于运行时才能知道该方法有没有真正的实现代码, iOS 中一套转发机制去处理没有找到方法实现的情况.