消息转发机制
方法调用的过程其实就是消息转发
1:动态方法解析 (resolveInstanceMethod)
不存在消息转发,实际上是动态的添加方法实现
2:快速转发(forwardingTargetForSelector)
当前类没有此方法的实现,需要找个其他类去处理这个方法
3:慢速转发
完整的消息转发过程,两个过程,
(1)方法签名(methodSignatureForSelector:),把当前方法相关信息保存下来
(2)消息转发(forwardInvocation),通过NSInvocation拿到这个方法,找个中间处理者去处理这个方法(invokeWithTarget)
如果都没找着,就实现doesNotRecognizeSelector这个方法,这样可以防止程序奔溃,增加程序的健壮性