IOS中MVC的浅析##
MVC 架构在 web 开发、软件开发和 App 开发中都是推荐的一种模式,它能让程序结构清晰、松耦合。iOS 对 MVC 的支持是默认的,它提供了一系列的机制保证我们可以让程序更好的 MVC 化。
何为MVC,自然是Controller,View,Model。
Controller 是总指挥,当它需要数据的时候就告诉 Model,你帮我获取某某数据;当它需要 UI 展示和更新的时候就告诉 View,你帮我生成一个 UI 显示某某数据。Controller 可以直接发送消息给 Model 和 View,对于 nib (xib 或 storyboard)方式创建的 view,使用 outlet 来联系 View。
一个场景数据改变了,需要通知需要通知 Controller,UI 需要 update 了。
iOS 中有一个 NotificationCenter,Model 在这里注册一个广播,它可以选择自己在什么时候发送这个广播,广播中带有消息。而 Controller 中要注册一个 Observer,也就是一个听众,随时关注着 Model 的广播,当收听到 Model 发送的广播后,可以接收消息,也可以做出相应的动作。当然,除了 KVO,也可以直接把 Model 的某些操作放在 Controller 中做,这样就不需要这么复杂了,但这会破坏 MVC 清晰的分工,破坏其松耦合。用了后一种方法,后来改成了 KVO 方式。
那View是怎么向视图控制器发送消息呢?一个场景是用户对 View 产生了 event, 如 touch。可以,对于 nib 是用 IBAction,对于 code 是用 addTarget,这个消息是当某某事件发生的时候告诉 Contoller 你可以做出某些相应的动作了。
还有一种场景是对于某些 View,一般会有一些相应的操作,iOS 自动提供了这样的消息,允许我们重写其方法。比如tableview中遵从协议选中单元格回调的方法。
我们一般是严禁 Model 和 View 之间的联系的,因为我们希望 data 和 representation 是分离的,所以不能直接跟 Model 要数据啊。iOS 提供了 datasource 这种机制来让 View 向 Controller 要数据。