ios消息转发机制
2015-08-18 本文已影响2663人
MikeZhangpy
当一个对象收到无法解读的消息后会如何处理,也就是说对象无法响应选择子(方法),这时就要进入到消息转发机制的流程。
我们经过会在程序崩溃的时候看到这样的提示:**** unrecognized selector sent to instance 表明你曾向某个对象发送了一条无法解读的消息。
下面将简述一下消息转发机制的流程。
1.查找接收者所属的类,看其是否能动态添加方法,以处理这个“未知的方法”。(动态方法解析)
+(BOOL) resolveInstanceMethod:(SEL)selector
2.运行期系统把消息转给其他接收者处理。(备援接收者)
-(id)forwardingTargetForSelector:(SEL)selector
3.经过上述两步后,如果还是没有办法处理选择子,就启动完成的消息转发。创建NSInvocation对象,把与尚未处理的那条消息有关的全部细节都封于其中。此对象包含选择子、目标target及参数。在触发NSInvocation对象时,消息派发系统会把消息指派给目标对象。
-(void)forwardInvocation:(NSInvocation *)invocation
tips:接收者在每一步都有机会处理消息。步骤越往后,处理消息的代价越大。