我应该将哪种观察者模式用于远程应用程序?

时间:2013-01-31 11:48:33

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

我正在构建一个远程应用程序,它正在接收其附件的不同状态。它接收的内容包括:电源状态开/关,音量状态5,均衡器设置爵士等等,除了将这些状态映射到具有选定或未选择状态的UI并将更改发送回附件时,无需做任何事情。< / p>

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

思考NSNotification,代表和KVO(键值观察)我试图弄清楚我应该使用哪种模式来实现这种特殊方法?

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

1 个答案:

答案 0 :(得分:1)

这真的取决于。

最松散耦合的是使用NSNotification和NSNotificationCenter,因为发布通知的实例不一定了解观察者,并且可能有多个观察者。

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

KVO模式需要更精确设计的观察关系。您将拥有并且必须完全了解KVO的实施方式。而KVO也允许一对多的观察。 KVO的缺点是如果观察关系是动态的和瞬态的,你必须更加关注这些对象是如何被拆除的,或者你可能会发生很多崩溃,例如向dealloc'ed实例发送更新等等。 / p>

如果您正在处理将要交付给第三方使用的库,那么NSNotification可能是首选。