【iOS开发】MVC设计模式

来源:互联网 发布:tcp 服务端源码 编辑:程序博客网 时间:2024/05/16 16:12

听说现在开始流行MVVM设计模式,听上去好像有点新奇,暂时还是习惯MVC设计模式,接下来主讲MVC模式.

说到iOS中的MVC还是从2011秋季斯坦福课程的老头的iphone公开课讲起,这个教授讲的概念很准确并且最为浅显易懂的.


Model-View-Controller

 MVC设计模式认为有三种类型的对象:对象模型,视图对象和控制器对象。
这个设计模式,就是用控制器controller将model和view进行分离,让view和model之间没有任何瓜葛,相互不知道对方的存在.

举个例子吧,大家好理解点.就像一个班级里面两个打了架的同学,如果有一个卫生大扫除活动,那么就需要一个第三者"班主任"来沟通协调,要不然谁还去干活.这个第三者就是控制器,这个第三者可以让他俩干啥就干啥.

上面理论讲了一大堆,还是上图直观(摘自斯坦福公开课的课件):


(1) 控制器与视图之间的交互大部分通过连线的Xcode的连线就可以,例如outlet,例如代理,有了这些,他们之间的沟通就畅通无阻了.

<1> 用户在view上面的一些交互动作(如:单击,双击,拖拽等)可以直接让控制器去响应;

<2> view需要的数据源可以通过控制器来提供;

<3> view上面的一些代理事件也可以指派给控制器,让控制器去完成.

这样有点坏处就是,控制器会很忙,要处理很多事件,非常被动.具体什么优化控制器里面的代码,等之后的文章中会有一篇专门讲"Controller代码瘦身",通过封装,让控制器的代码量不适于那么臃肿.........


(2) 控制器还需要一个很重要的角色:Model

model,顾名知义,模型.我们通过模型来提供数据,最终才能有数据展现在用户的眼前.

有了模型,控制器想什么时候用数据,想什么用都可以. 有了模型,控制器可以相当的任性.....


模型和控制器之间的联系可以通过通知(Notification)和观察者模式(KVO).模型没必要知道控制器的存在,只需要提供数据就可以了,这样可以减少耦合性,提高代码的复用性.

model模型数据已经更新了,可以通过广播的方式将数据更新信息发出去.model的观点:谁关心我的更改让谁收听去,我对谁收听了我不感兴趣。


(3)Notification与KVO场景使用留着下一次具体上代码解说.


总结一点:model和view不能直接交互,要通过控制器这个第三者来管理.这样可以减少耦合性.


3 0
原创粉丝点击