消息转发 _objc_msgForward

过程

1、调用resolveInstanceMethod:方法(或resolveClassMethod:)允许用户在此时为该类动态添加实现。如果这个方法有实现,那么重新开始objc_msgSend流程(这个方法中可以调用class_addMethod进行动态方法添加)

2、没有实现步骤一的动态添加方法的话,调用forwardingTargetForSelector:方法,尝试找到一个能响应该消息的对象,如果获取到,则直接把消息转发给它,否则执行步骤3

3、调用methodSignatureSelector:方法,尝试获得一个方法签名,如果获取到了创建一个Invocation传给forwardInvocation:,否则调用doesNotRecongnizeSelector抛异常。

4、调用forwardInvocation方法,获取传入的invocation在这里处理

5、上面都没转发成功的话,则调用doesNotRecongnizeSelector抛异常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章