iOS雨笙 iOS中MVC的原理和联系
2015-09-27 12:19
309 查看
MVC,即Model - View - Controller, 即模型- 视图 - 控制器.
MVC的应用是非常广泛的,我们先来分析一下其内部原理.
Model(模型),是用来存储,处理数据,为应用程序提供数据的,View(视图),是用来展示用户界面的,提供用户交互,展示模型提供的数据.Controller(控制器),类似于一个中间者,既管理获取数据,又管理数据显示,简言之,Model(模型)和View(视图)之间是禁止通信的,必须通过Controller(控制器)进行操控.MVC模式主要就是为了解除模型和视图之间的耦合.
具体是如何通信的呢?我们分部解释.下面C代表控制器,M代表模型,V代表视图.
C和V之间的通信.C可以直接控制V.比如在C中创建一个按钮UIButton.这种情况比较少见,一般C只做事件的处理,很少做视图的创建.那如何处理V的事件呢?V会向C发起通信事件,比如设置按钮的事件(UIButton),设置代理(UITextfield的代理),设置dataSource(UITableView的dataSource),而C会处理这些V产生的事件.
C和M的通信.M是提供数据的,C可以使用M中的数据,那M中的数据有变化如何处理呢?M和C之间的通信方式有KVO,通知,可以在M发生变化时通知C.
再次强调,V和M之间是禁止通信的.他们之间想实现V把M的数据显示出来,必须通过C,C从M中获取数据,然后在C中显示到View上.
贴一张MVC之间的关系图,它们之间的关系大体如图所示.
为什么要多此一举,创建一个Controller呢?主要是为了实现低耦合,提高重用性,多个视图可以享用一个模型,多个控制器享用一个视图.而且易于维护,布局错误找View,数据错误找Model,之间逻辑错误找Controller.
MVC其实是一种思想,让代码层次更分明,更具有可读性,代码量达到一定的程度,其中的好处也自然会体现出来.所以,不要太纠结为什么要这样使用,这本身就没有对和错,不结合代码也许说的很空洞,先大体了解里面思路,在之后的学习工作中我们会天天遇到,久而久之也就明白了.
MVC的应用是非常广泛的,我们先来分析一下其内部原理.
Model(模型),是用来存储,处理数据,为应用程序提供数据的,View(视图),是用来展示用户界面的,提供用户交互,展示模型提供的数据.Controller(控制器),类似于一个中间者,既管理获取数据,又管理数据显示,简言之,Model(模型)和View(视图)之间是禁止通信的,必须通过Controller(控制器)进行操控.MVC模式主要就是为了解除模型和视图之间的耦合.
具体是如何通信的呢?我们分部解释.下面C代表控制器,M代表模型,V代表视图.
C和V之间的通信.C可以直接控制V.比如在C中创建一个按钮UIButton.这种情况比较少见,一般C只做事件的处理,很少做视图的创建.那如何处理V的事件呢?V会向C发起通信事件,比如设置按钮的事件(UIButton),设置代理(UITextfield的代理),设置dataSource(UITableView的dataSource),而C会处理这些V产生的事件.
C和M的通信.M是提供数据的,C可以使用M中的数据,那M中的数据有变化如何处理呢?M和C之间的通信方式有KVO,通知,可以在M发生变化时通知C.
再次强调,V和M之间是禁止通信的.他们之间想实现V把M的数据显示出来,必须通过C,C从M中获取数据,然后在C中显示到View上.
贴一张MVC之间的关系图,它们之间的关系大体如图所示.
为什么要多此一举,创建一个Controller呢?主要是为了实现低耦合,提高重用性,多个视图可以享用一个模型,多个控制器享用一个视图.而且易于维护,布局错误找View,数据错误找Model,之间逻辑错误找Controller.
MVC其实是一种思想,让代码层次更分明,更具有可读性,代码量达到一定的程度,其中的好处也自然会体现出来.所以,不要太纠结为什么要这样使用,这本身就没有对和错,不结合代码也许说的很空洞,先大体了解里面思路,在之后的学习工作中我们会天天遇到,久而久之也就明白了.
相关文章推荐
- iOS 判断iphone ipad 系统版本
- iOS Tips - 02
- iOS开发之xib技巧介绍
- 一只蹩脚的Smelly Cat
- iOS多线程操作(NSThread,GCD,NSNSOperation )
- ios-下载管理类封装
- 【读书笔记】iOS-编码对象
- iOS Tips-01
- 【读书笔记】iOS-编码对象
- iOS中两种管理状态栏
- iOS程序的启动过程
- iOS弹解盘时 控制界面滚动的封装类
- iOS开发-自定义后台显示图片
- [iOS开发]沙盒中的文件操作
- iOS开发:单例(Static)模式
- iOS --- 使用NSURL的urlWithString时,尽量先对字符串进行UTF8转码
- ios9 提交ipad出现bundle错误的解决方案
- ViewController 的view的3种创建方式
- [iOS开发项目-2] 用户登录界面
- iOS开发笔记-静态库.a