ios消息转发机制

程序崩溃:**** unrecognized selector sent to instance

含义:表明 已向某个实例对象发送了无法解读的消息(此处方法消息)

即通过该实例对象无法对选择器方法做出响应(该实例对象中未做方法声明)。

此时进入消息转发机制:

1.消息转发机制被触发之前,先查找消息接收对象所属类,看能否人工的动态添加尚无法解读的方法,处理这个“无法解读的方法”。(动态方法解析)

(1)+(BOOL) resolveInstanceMethod:(SEL)selector //参数selector:无法解读的实例方法

(2)+resolveClassMethod:  //参数selector:无法解读的类方法

2.上一步failed之后,计算机系统将把消息转发给其他的备援接收者处理。

-(id)forwardingTargetForSelector:(SEL)selector  //forwardingTarget转发目标

3.上述两步处理选择子均失败后,则启动已完成的消息转发机制。

具体操作:创建NSInvocation调用对象,把与尚未处理的那条消息有关的全部细节封于调用对象中,包含选择子、目标target及参数。在触发NSInvocation对象后,消息派发系统会把消息指派给调用对象中的目标对象。

-(void)forwardInvocation:(NSInvocation *)invocation

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

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