OC中消息转发机制

       在编译期 消息传递的过程中向类发送了其无法解读的消息并不会报错,因为在运行期可以继续向类中添加方法,所以编译器在编译时还无法确知类中到底会不会有某个方法实现。当对象接收到无法解读的消息后,就会启动“消息转发”机制,程序员可经由此过程告诉对象应该如何处理未知消息。

消息转发分为两大阶段:

第一阶段:先征询接收者所属的类,看其是否能动态添加方法,以处理当前这个“未知的选择子”,这叫做“动态方法解析”。

第二阶段:该阶段设计“完整的消息转发机制”。如果运行期系统已经把第一阶段执行完了,那么接收者自己就无法再以动态新增方法的手段来响应包含该选择子的消息了。此时,运行期系统会请求接收者以其他手段来处理与消息相关的方法调用。这分为两小步。首先,请接收者看看有没有其他对象能处理这条消息。如有,则运行期系统会吧消息转给那个对象,于是消息转发过程结束,一切如常。若没有“备援的接收者”,则启动完整的消息转发机制,运行期系统会吧与消息有关的全部细节都封装到NSInvocation对象中,再给接收者最后一次机会,令其设法解决当前还未处理的这条消息。

总结:

1、若对象无法响应某个选择子,则进入想想转发流程。

2、通过运行期的动态方法解析功能,我们可以在需要用到的某个方法时再将其加入类中。

3、对象可以把其无法解读的某些选择子转交给其他对象来处理。

4、经过上述两步之后,如果还是没办法处理选择子,那就启动完整的消息转发机制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • 6.理解“属性”这一概念 @dynamic关键字:告诉编译器不要自动创建实现属性所用的实例变量,也不要为其创建存取...
    Code_Ninja阅读 4,030评论 0 3
  • 若想令类能理解某条消息,我们必须以程序码实现出对应的方法才行。但是,在编译期向类发送了无法解读的消息并不会报错,因...
    张聪_2048阅读 2,744评论 0 1
  • 目录 Objective-C Runtime到底是什么 Objective-C的元素认知 Runtime详解 应用...
    Ryan___阅读 5,931评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,251评论 25 709

友情链接更多精彩内容