MST

星途 面试题库

面试题:Objective-C应用状态管理下多视图间数据传递与同步

假设在一个Objective-C应用中有多个视图控制器,不同视图之间存在数据传递和状态同步需求,例如从视图A跳转到视图B,视图B修改数据后返回视图A,视图A要及时更新显示,描述至少两种实现这种数据传递与同步的方式及其优缺点。
15.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

1. 使用代理(Delegate)

  • 实现方式
    • 在视图B中定义一个代理协议,协议中声明视图B修改数据后需要通知视图A更新的方法。
    • 视图A遵守该协议,并实现协议中的方法。
    • 在视图B中设置代理为视图A,当视图B数据修改完成,调用代理方法通知视图A更新。
  • 优点
    • 代码结构清晰,视图B与视图A之间的依赖关系明确,低耦合。
    • 代理协议可定制性强,能根据具体需求定义不同的方法。
  • 缺点
    • 当视图B需要与多个视图进行数据传递时,会需要管理多个代理,代码量增加且维护成本上升。
    • 只能一对一传递数据,不适用于一对多的数据传递场景。

2. 使用通知(NSNotification)

  • 实现方式
    • 视图B在数据修改完成后,发送一个通知,携带修改后的数据。
    • 视图A在合适的地方(如viewDidLoad)注册接收该通知,并实现对应的通知处理方法,在方法中更新显示。
  • 优点
    • 可以实现一对多的数据传递,一个视图发送通知,多个视图都可以接收并处理。
    • 视图之间耦合度低,不需要提前知道对方的存在。
  • 缺点
    • 代码调试相对困难,因为通知是全局广播的,可能会被不相关的视图接收到并处理,引发潜在问题。
    • 通知的发送和接收之间的关系不够明确,不利于代码的维护和理解。

3. 使用单例(Singleton)

  • 实现方式
    • 创建一个单例类,用于存储共享数据。
    • 视图B修改数据时,更新单例中的数据。
    • 视图A在合适时机(如viewWillAppear)从单例中获取最新数据并更新显示。
  • 优点
    • 数据共享方便,所有视图都可以直接访问单例中的数据,易于实现数据同步。
    • 适用于多个视图之间频繁共享数据的场景。
  • 缺点
    • 单例类生命周期较长,可能会导致内存占用问题。
    • 多个视图同时访问和修改单例数据可能引发线程安全问题,需要额外处理。