IOS 之MVC

MVC模式最早由Trygve Reenskaug1978年提出[1] ,是施乐帕罗奥多研究中心Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。 ---(维基百科)

MVC 提出后,得到了广泛的应用。 MFCJ2EE Java Swing.NET Perl Ruby on RailsPythonJavaScriptPHPActionScript3 等都有各自实现。对于IOS开发,同样用到MVC。下面就MVCIOS 开发中的一些情况做做简单的介绍。

 

模型反应你的程序是什么. 但它不关心如何展示

控制器你的模型如何展示给用户. 它关心UI逻辑

视图渲染数据展示给用户并接收用户反馈。

 

MVC的所有内容就是在对上述三者的分工及通讯。

 

1) Controller 可以直接和 modelview 通讯

 一般用法是controller直接引用modelview 实例对象。

 

2) Model view 不应该直接通讯

 

3) View controller 之间的通讯

a)       View接收一些用户事件,但并不涉及业务处理。所以一般是通过protocol-delegate方法,把用户事件传回给控制器处理

 

b)       View 不能拥有数据,但view的展示需要数据。一般也是通过协议去获取。例如UITableView,其获取数据的方式就是通过定义UITableViewDatasource 这个协议去获取。

 

 

4) Controller 一般会作为数据源(而不是模型)

 同样,参考UITableViewController,其实现了 UITableViewDataSource, 而不是model实现该协议。

 

5 Controller 并要时需解析/格式化 model返回的数据给View

 View 不关注业务逻辑。 Model 不关注view。这就导致model返回数据,可以在某些情况下并不适于view直接展示。因此,这时controller 一般需要先针对view的需要处理好数据,然后才交给view

  另一典型情况是系统错误信息的处理。系统报错信息五花八门,但不是每一条信息都适合直接给用户展示。因此,controller 这时也是需要对错误信息先进行处理,然后才能放行,交给view

 

 

6 Model controller 通讯?

Model 应该是跟UI 独立的。如果model 有信息需要更新或者其他任意事件需要反馈,一般使用消息/通知模式。

例如一些后台处理程序:邮件刷新,数据统计等用户并不关心(UI触发),但又需要提示用户。这时可以在相应的controller设立消息接收器,而model,则在需要触发响应时,通过通知的方式,把信息发放出去。而它自己,其实是不理会消息的后续的情况的。

 

 

下面是从斯坦福教程中截图的一副MVC的关系图,很是简洁明了。

 

 

另附两张不同MVC模型间的联系的图片

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值