面试题答案
一键面试代理模式
- 特点:
- 一对一通信。一个对象(代理者)专门负责与另一个对象(被代理者)进行交互,被代理者通过代理者来完成特定任务或传递信息。
- 代理者和被代理者之间存在紧密的耦合关系,通常在编译时就确定了这种关系。
- 优点:
- 代码结构清晰,代理者明确知道要执行的任务,逻辑集中。
- 可复用性高,代理者可以在不同的场景下为被代理者提供相同的服务。
- 便于调试和维护,因为一对一的关系使得问题定位相对容易。
- 缺点:
- 耦合度较高,如果被代理者或代理者的接口发生变化,可能需要修改多处代码。
- 对于复杂的业务逻辑,可能需要创建多个代理类,增加代码量。
- 适用场景:
- 例如在一个图片加载的场景中,视图控制器(ViewController)作为代理,图片加载类(ImageLoader)作为被代理者。ImageLoader在图片加载完成后,通过代理方法通知ViewController,ViewController可以根据加载结果进行相应的处理,如显示图片等。这种一对一的交互场景适合使用代理模式。
- 又如在文本输入框(UITextField)中,ViewController可以作为代理,当用户在文本输入框输入内容时,文本输入框通过代理方法通知ViewController,ViewController可以实时验证输入内容是否符合要求等。
通知机制
- 特点:
- 一对多通信。一个对象发送通知,多个监听者可以接收该通知并做出相应处理。
- 通知者和监听者之间是松散耦合的,监听者通过注册通知来接收特定类型的通知,通常在运行时动态建立这种关系。
- 优点:
- 灵活性高,任何对象只要注册了相应的通知,就可以接收到通知并处理,无需事先了解通知发送者的具体信息。
- 易于扩展,当有新的需求需要监听某个通知时,只需新注册一个监听者即可,不会影响到通知发送者和其他监听者。
- 缺点:
- 代码逻辑相对分散,多个监听者可能对同一个通知做出不同处理,不利于代码的集中管理和调试。
- 性能问题,如果有大量的通知注册和发送,可能会影响应用的性能。
- 适用场景:
- 例如在应用程序的状态变化场景中,当应用进入后台(UIApplicationDidEnterBackgroundNotification)或从后台返回(UIApplicationWillEnterForegroundNotification)时,多个不同的模块(如数据缓存模块、界面更新模块等)可能都需要做出相应的处理,这种一对多的场景适合使用通知机制。
- 又如在一个电商应用中,当用户下单成功后,可能需要通知购物车模块更新商品数量,通知支付模块记录支付成功,通知物流模块准备发货等,这种多个模块都需要响应同一事件的场景适合通知机制。