MST

星途 面试题库

面试题:Objective-C代理模式与通知机制的比较及适用场景

在Objective-C开发中,代理模式和通知机制都用于对象间的通信。请详细比较两者的特点、优缺点,并举例说明在哪些场景下更适合使用代理模式,哪些场景适合使用通知机制。
36.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

代理模式

  1. 特点
    • 一对一通信。一个对象(代理者)专门负责与另一个对象(被代理者)进行交互,被代理者通过代理者来完成特定任务或传递信息。
    • 代理者和被代理者之间存在紧密的耦合关系,通常在编译时就确定了这种关系。
  2. 优点
    • 代码结构清晰,代理者明确知道要执行的任务,逻辑集中。
    • 可复用性高,代理者可以在不同的场景下为被代理者提供相同的服务。
    • 便于调试和维护,因为一对一的关系使得问题定位相对容易。
  3. 缺点
    • 耦合度较高,如果被代理者或代理者的接口发生变化,可能需要修改多处代码。
    • 对于复杂的业务逻辑,可能需要创建多个代理类,增加代码量。
  4. 适用场景
    • 例如在一个图片加载的场景中,视图控制器(ViewController)作为代理,图片加载类(ImageLoader)作为被代理者。ImageLoader在图片加载完成后,通过代理方法通知ViewController,ViewController可以根据加载结果进行相应的处理,如显示图片等。这种一对一的交互场景适合使用代理模式。
    • 又如在文本输入框(UITextField)中,ViewController可以作为代理,当用户在文本输入框输入内容时,文本输入框通过代理方法通知ViewController,ViewController可以实时验证输入内容是否符合要求等。

通知机制

  1. 特点
    • 一对多通信。一个对象发送通知,多个监听者可以接收该通知并做出相应处理。
    • 通知者和监听者之间是松散耦合的,监听者通过注册通知来接收特定类型的通知,通常在运行时动态建立这种关系。
  2. 优点
    • 灵活性高,任何对象只要注册了相应的通知,就可以接收到通知并处理,无需事先了解通知发送者的具体信息。
    • 易于扩展,当有新的需求需要监听某个通知时,只需新注册一个监听者即可,不会影响到通知发送者和其他监听者。
  3. 缺点
    • 代码逻辑相对分散,多个监听者可能对同一个通知做出不同处理,不利于代码的集中管理和调试。
    • 性能问题,如果有大量的通知注册和发送,可能会影响应用的性能。
  4. 适用场景
    • 例如在应用程序的状态变化场景中,当应用进入后台(UIApplicationDidEnterBackgroundNotification)或从后台返回(UIApplicationWillEnterForegroundNotification)时,多个不同的模块(如数据缓存模块、界面更新模块等)可能都需要做出相应的处理,这种一对多的场景适合使用通知机制。
    • 又如在一个电商应用中,当用户下单成功后,可能需要通知购物车模块更新商品数量,通知支付模块记录支付成功,通知物流模块准备发货等,这种多个模块都需要响应同一事件的场景适合通知机制。