ios消息转发机制

      当一个对象收到无法解读的消息后会如何处理,也就是说对象无法响应选择子(方法),这时就要进入到消息转发机制的流程。

      我们经过会在程序崩溃的时候看到这样的提示:**** unrecognized selector sent to instance 表明你曾向某个对象发送了一条无法解读的消息。

      下面将简述一下消息转发机制的流程。

      1.查找接收者所属的类,看其是否能动态添加方法,以处理这个“未知的方法”。(动态方法解析)

      +(BOOL) resolveInstanceMethod:(SEL)selector

      2.运行期系统把消息转给其他接收者处理。(备援接收者)

      -(id)forwardingTargetForSelector:(SEL)selector

      3.经过上述两步后,如果还是没有办法处理选择子,就启动完成的消息转发。创建NSInvocation对象,把与尚未处理的那条消息有关的全部细节都封于其中。此对象包含选择子、目标target及参数。在触发NSInvocation对象时,消息派发系统会把消息指派给目标对象。

       -(void)forwardInvocation:(NSInvocation *)invocation

tips:接收者在每一步都有机会处理消息。步骤越往后,处理消息的代价越大。

你可能感兴趣的:(ios消息转发机制)