实现 MVC 模式
Posted
技术标签:
【中文标题】实现 MVC 模式【英文标题】:Implementing the MVC pattern 【发布时间】:2016-09-30 00:51:07 【问题描述】:我在使用 Swift 在 ios 中时遇到问题。根据 Apple 文档,有一个 MVC 模式:
我对此很好,但正如您所见,当模型自身发生变化时(例如,来自套接字的传入消息)它应该如何通知控制器?
例如,我有一个聊天应用程序,其模型表示消息列表。当模型收到新消息时,它如何通知控制器?有没有传统的方法可以做到这一点?
谢谢
【问题讨论】:
最常见的两种方式是委托和使用 NSNotifications @Paulw11 是的,工作完美,看起来很漂亮,谢谢! 键值观察 (kvo) 也是解决这个问题的一个令人信服的方法。 NSHipster 有一篇较旧但仍然很有趣的文章:nshipster.com/key-value-observing 同意@Paulw11....此外,如果有多个相关方的潜力,通知会更加灵活。委托通常意味着一对一的依赖关系,这种依赖关系只是理论上抽象出来的。 (也有 KVO,但说得越少越好,也许。:)) 【参考方案1】:您可以通过两种方式实现此模型 - 控制器通信。
-
委托模式
通知 (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html)
关于详细解释,我建议您观看 CS 193p MVC 讲座。 (https://www.youtube.com/watch?v=Cb8KtEI3ZaY)
【讨论】:
【参考方案2】:层之间的通信是一个非常有趣的话题,并且不仅仅是一个方法列表。
这里是a very relevant article from objc.io,它不仅有一个详尽的沟通方法列表,还分析了它们的优缺点,并提出了一个流程图来帮助你决定哪种方法是最好的。
在您的情况下,模型是发送者,控制器是接收者。通常,控制器持有模型,因此控制器知道模型,但模型不知道控制器。因此,您将位于图表的下部。
请阅读全文。它还包含来自 Apple 框架的示例。这真的很有用。
【讨论】:
以上是关于实现 MVC 模式的主要内容,如果未能解决你的问题,请参考以下文章