探秘Runtime
该文章属于<简书 — 刘小壮>原创,转载请注明: <简书 — 刘小壮> https://www.jianshu.com/p/f313e8e32946 当一个对象的方法被调用时,首先在对象所属的类中查找方法列表,如果当前类中没有则向父类查找,一种找到根类 NSObject 。如果始终没有找到方法实现,则进入消息转发步骤中。 动态消息解析 当一个方法没有实现时,也就是在 cache lsit 和其继承关系的 method list 中,没有找到对应的方法。这时会进入消息转发阶段,但是在进入消息转发阶段前, Runtime 会给一次机会动态添加方法实现。 可以通过重写 resolveInstanceMethod: 和 resolveClassMethod: 方法,动态添加未实现的方法。其中第一个是添加实例方法,第二个是添加类方法。这两个方法都有一个 BOOL 返回值,返回 NO 则进入消息转发机制。 void dynamicMethodIMP(id self, SEL _cmd) { // implementation .... } + (BOOL)resolveInstanceMethod:(SEL)sel { if (sel == @selector(resolveThisMethodDynamically)) { class_addMethod([self class], sel,