【问题标题】:Which observer pattern should I use for remote app?我应该为远程应用程序使用哪种观察者模式?
【发布时间】:2013-01-31 11:48:33
【问题描述】:

我正在构建一个远程应用程序,该应用程序正在接收其附件的不同状态。它正在接收诸如:电源状态开/关、音量状态 5、均衡器设置爵士乐等内容,除了将这些状态映射到具有选定或未选定状态的 UI 并将完成的更改发送回附件之外,别无他法。

关于应用架构: 该应用程序与其附件连接,如 Apples EADemo project 中所示,使用 external accessory framework。 UI 是在非重复定制的UITableViewCell 中构建的,其中充满了UIButtons。启动应用程序时,数据模型类将从示例EADSessionController 接收所有当前状态,并且必须使用上述模式之一将这些状态传达给 UI(单元格直接而不是 UITableViewController)。这将是一个独立的单页应用程序,看起来像一个真正的遥控器。

考虑NSNotification、委托和KVO(键值观察)我想弄清楚我应该为这种特殊方法使用哪些模式?

任何关于为什么选择其中一个的答案以及关于如何实施的简要说明将不胜感激。如果您的答案是 KVO,请提供更多见解,因为到目前为止我从未使用过这种模式。

【问题讨论】:

    标签: ios objective-c delegates key-value-observing nsnotifications


    【解决方案1】:

    这真的取决于。

    最松耦合的一种是使用NSNotification和NSNotificationCenter,因为发布通知的实例不一定知道观察者,可以有多个观察者。

    委托模式更严格一些,通常只有一个委托对象接收消息。如果项目中的 UITableViewController 是唯一处理消息的实例(或者它会正确地将消息传播到其他组件),它仍然可以。

    KVO 模式需要更精确设计的观察关系。您将不得不并且必须关注 KVO 是如何实现的。而且KVO还允许一对多的观察。 KVO 的缺点是如果观察关系是动态的和瞬态的,你必须更加关心这些对象是如何被拆除的,否则你可能会遇到很多崩溃,比如向一个已释放的实例发送更新等。

    如果您正在开发一个将交付给第三方使用的库,那么 NSNotification 可能是首选。

    【讨论】:

    • 如果使用通知,我会创建一个通知并使用 userInfo 告诉接收者 (UITableViewCells) 发生了什么变化,或者我最好创建一个通知。每个按钮有 25 个通知,并且只让单元格观察他们感兴趣的通知?
    • 恕我直言,您应该将它们合并为一个更新事件,发布一个通知,并让UITableViewController 观察它们。一旦 UITableViewController 收到通知,它应该推送更新和/或重新加载相应的行。由于UITableViewCells总是被重复使用,所以不建议在您描述的场景中直接从单元格中更新。
    • 在我的情况下,tableview 仅包含遥控器 UI 的非重复单元格。因此,由于我认为数据绑定,在单元格类中设置单元格按钮的选定状态应该是更清洁的方法。谢谢你的帮助
    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多