对象收到无法解读的消息时,就会启动消息转发机制
第一个阶段:动态方法解析。
1. 对象在收到无法解读的消息后,首先将调用其所属类下面这个类方法
+(BOOL) resolveInstanceMethod:(SEL)selector; //参数名为那个未知的选择子
也就是再继续往下执行转发机制之前,本类有机会新增一个处理这个选择子的方法。
如果选择子的方法是个类方法,则使用
+(BOOL) resolveClassMethod:(SEL)selector。
2.备援接收着
接收者第二次处理无法解读消息的机会,将消息转给其他接收者来处理
-(id)forwardingTargetForSelector:(SEL)selector
第二个阶段:完整的消息转发。
到了这个一步就要启动完整消息转发机制,首先要创建NSInvocation,把尚未处理的消息的全部细节放进去,触发NSInvocation时,通过消息派发系统,将消息指派给目标对象。
-(void)forwardInvocation:(NSInvocation *)invocation
跟备援接收者 方案所实现的方法等效。实现方法时,若发现某调用操作不应由本类处理,则需要调用超类的同名方法。所以继承体系中每个类都有机会处理此调用请求。直到NSObject, 最后还会调用
doesNotRecognizeSelector: 以抛出异常。表明消息最终没有被处理。