MST

星途 面试题库

面试题:Objective-C动态方法解析与备用接收者的关系及应用场景

在Objective-C消息转发机制里,动态方法解析和备用接收者这两个阶段分别起到什么作用?在实际项目开发中,你能举例说明它们各自适用的场景吗?
21.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

动态方法解析阶段作用

  1. 作用:当对象接收到无法识别的消息时,首先进入动态方法解析阶段。在这个阶段,运行时系统会给类一次机会,让其动态添加方法来处理该消息。这使得程序在运行时能够根据实际需求,灵活地为类添加原本不存在的方法,增强了代码的灵活性和可扩展性。
  2. 适用场景举例:在一些工具类库开发中,比如某个通用的缓存管理类。假设最初设计时,该类只提供了常规的缓存读取和写入方法。但在项目实际使用过程中,发现有时需要对缓存数据进行加密处理后再存储。此时就可以在动态方法解析阶段,通过resolveInstanceMethod:(实例方法)或resolveClassMethod:(类方法)动态添加加密存储相关的方法,而无需修改类的原始代码结构。

备用接收者阶段作用

  1. 作用:如果在动态方法解析阶段没有找到或添加合适的方法来处理消息,运行时系统会进入备用接收者阶段。该阶段允许对象寻找其他对象来处理这条消息,为消息的处理提供了另一种途径,一定程度上实现了对象间的协作与消息传递的灵活性。
  2. 适用场景举例:在一个复杂的视图控制器层级结构中,比如一个主视图控制器(MainViewController)包含多个子视图控制器(SubViewController1、SubViewController2等)。假设主视图控制器接收到一个与某个子视图控制器特定功能相关的消息,但主视图控制器本身并没有实现该方法。这时主视图控制器可以在备用接收者阶段,将消息转发给对应的子视图控制器来处理。例如,主视图控制器接收到一个“刷新特定数据列表”的消息,而实际负责显示和管理该数据列表的是SubViewController1,主视图控制器就可以把这个消息转发给SubViewController1进行处理,避免了在主视图控制器中编写大量与子视图控制器具体功能相关的代码,使代码结构更加清晰。