每个技术都有什么优缺点?
我应该在哪些情况下使用它们?
我应该在哪些情况下使用它们?
这里的经验法则是确定有多少客户端想要被通知一个事件。如果主要是一个对象(例如,关闭视图或对点击按钮采取行动,或者对下载失败做出反应),那么您应该使用委托模式。
如果您发出的事件可能同时对许多对象感兴趣(例如,屏幕旋转、内存使用情况、用户登录/注销),那么您应该使用 NSNotificationCenter
。
它们的目的是不同的:
通知被用于向可能来自发送者未知的多个接收者广播消息。
委托被用于代表发送者向单个已知接收者发送消息。
通知通常更适合用于通知UI其他线程上发生的更改。苹果公司的文档强烈反对在可能的情况下跨线程使用委托,这样做不仅会影响稳定性,还会影响性能。在Mac上,他们建议使用Bindings,但由于它们在iPhone上不存在,通知可能是您的下一个最佳选择。
通知更适合解耦UI组件。它允许您在不修改控制器或模型的情况下插入任何视图。绝对更适合松耦合设计。
但是对于委托和通知之间的性能,您需要考虑调用的频率。
对于更频繁的事件,委托可能更好,而对于更少的事件但更多的接收者,通知更好。选择什么取决于项目。
DidFireMissle
)是单向的,而如果你需要返回信息(例如-(BOOL)shouldFireMissle
),则需要使用代理。请注意,翻译后保持原意,使语言更加通俗易懂,不得添加解释或其他内容。 - benzado