iOS设计模式之MVC设计模式浅谈
2015-09-19 09:37
393 查看
本文之所以称为是MVC设计模式的浅谈,是因为MVC设计模式的概念并不是很复杂,但是如果要合适恰当地使用到项目中去的话,那么是需要很丰富的经验,和较为深刻的理解的。本文的另一个目的是将自己对MVC设计模式的理解记录下来,本文在以后会不断地更新。
1、MVC设计模式的概念M:model,被叫做模型,本质上是APP所需要的数据,对这个model类的处理又会有很多的技巧和方法(例如对经典的plist文件结构使用字典转模型的技巧)
V:view,是APP上显示的视图,在MVC设计模式中,经常将view类从controller中抽取出去,创建一个类,单独进行view内部的逻辑和布局操作,但是写出的view是个空的架构,没有数据,只会提供一些接口去接受数据,使得在controller中创建的view对象,可以通过view类暴露的接口接受到经过controller处理过的model中的数据。虽然view的数据是来源于model的,但是实际上,在view类和model类之间是不会进行通信的。这也正是MVC设计模式的目的所在:将视图和数据分离,降低耦合性,使得同一种数据可以通过不同的视图来表示和展示出来。
C:controller,视图控制器
(1)、由于在iOS的MVC中,view和model类是不能进行相互通信的,所以controller便承担了中介的作用。那么一定存在controller与view和model之间的交流和通信,controller就与model和view建立着联系,保持着数据的更新。
(2)、其次,view类所做的逻辑只是局限于view内部的布局和展示,而view在视图控制器的view(或者是view的父类)中是怎么展示的view是不知道的。这时候就需要controller来建立这种逻辑和布局。
(3)、最后,由于model类中构建的数据是最原始的,在controller中view所获得的数据往往是需要进过处理的,那么这个处理操作就是由视图控制器来完成的。
2、MVC设计模式的交互
我们可以将MVC设计模式形象化为三个三角形,分别代表着model、controller和view,最上面的是controller,左边的是view,右边的 是model,当然,这三个三角形之间会有很多的方式。在cocoa和cocoa touch中的MVC是不允许model和view之间进行通信的,所以这两个类相对独立,最关键的是model和view与controller之间的交互:
(1)model与controller之间的交互
从controller到model:通过导入model类,然后创建model属性,进行操作
从model到controller:通过iOS中提供的广播机制,包括了Notification和KVO(key value observing)模式
(2)view和controller之间的交互
从controller到view:通过导入view类,然后创建view属性,进行操作。此外,还可以通过addTarget方法为拿到的属性添加方法,配合addTarget中提供的动作参数(常用的是点击和值改变)为view添加事件。
从view到controller:通过delegate和dataSource,在创建的view类中自定义delegate和dataSource并且提供合适的代理和数据源方法,这样controller实现了协议就可以进行信息的交流了
3、MVC的使用场景
设计模式的终极目的都是为了使得项目更加容易维护和编写,所以如果我们抱着为了使用设计模式而将设计模式用到项目中的话,那么效果当然不会很好。对于MVC设计模式来说,在iOS中,由于编写的是以UI为基础的APP,所以MVC十分常用,但是如果一个很简单的界面,几乎是不超过200行代码的,就没有必要去使用MVC设计模式,如果去刻意使用MVC设计模式,反而会增加项目中类的数量,不但没有减少复杂度,还增加了不少。所以我们需要使用MVC设计模式是在项目很大,而且以后还需要不断地更新和维护的,使用MVC模式,将视图和数据分离出来,以后的修改就变得十分简单和迅速
相关文章推荐
- ios9 应用传输安全:ATS
- iOS - 响应者链触摸事件
- IOS - NSOperation详细总结
- IOS 内存管理见解
- ios下划线变量:为什么变量前要加下划线才有用?
- iOS 随机数的产生
- ios 应用实现快速的临时缓存之模型的自动归档
- iOS Push服务端PHP代码
- XcodeGhost病毒波及大量主流iOS应用
- ios 应用实现快速的临时缓存之JSON 转化成模型
- iOS---数据离线缓存
- ios数据持久化
- iOS激情详解之文件夹创建,移动,复制,删除以及归档和反归档
- 汉字转换成拼音封装
- iOS视频播放Demo VideoPlayerDemo
- 程序间的通信
- iOS开发学习之实现瀑布流
- 一张图告诉你iPhone设备、iOS系统版本、屏幕分辨率的演变
- IOS巅峰之图片异步下载
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)