版权声明:本文系KevinAshen灵感之火花,转载请申明,一起前行! https://blog.csdn.net/KevinAshen/article/details/82763691
参考文章
GitHub地址
原理介绍
- 首先一切都来源于一张说明MVC模式的图片,只要你搜过MVC,基本上百分之八十的文章开头都是甩给你这张图片
- 接下来我们来理解MVC是啥
- MVC实际上一种设计模式,MVC分别是Model,View,Controller
- 在没有学习设计模式时,我们的程序基本上很简单,就是所有东西都塞在ViewController。这样子在编写比较大型的项目的时候应该也感受到了,你的Controller无比臃肿,所有代码都在里面,很难纠错。
- Model是模型即对于数据的处理,包括了网络请求,数据加工
- View是试图,UI啦,反正就是你在App上能看的到的东西都是View
- Controller是控制器,这个其实也是刚开始我学习时的一个疑惑,为什么所有的UI等等之类的要算在Controller(原来其实这本来就是不好的习惯),控制器其实是作为Model与View的中介,把Model数据在View上显示出来
- 当然这个听起来非常easy,好像很有道理的样子,但其实这意味着在编程习惯上巨大的改变,举一个很简单的例子,如果现在我想创建一个UIButton,添加一个点击事件(比如打印一句话之类的)
- 我们可以分成几个部分来看这件事,第一:初始化创建按钮,第二:写一个点击事件,第三:添加上去
- 对于以前的习惯很简单,按部就班全部写在viewDidLoad里就行
- 而换成现在MVC,你可能也觉得很简单,因为根据定义,只不过要把UIButton创建写在View层,在Controller里调用一下就好
- 可是有一个问题,点击事件算什么?显然我们不能把它归类。
- 我们来看最开始给出的图,由于我们把一个页面上发生的事,分成了三份,所以很重要的一件事就是学习如何让这三个层能够互通有无
- 对于Model来说,它无法与View层直接交互,必须通过Controller
- 对于Controller来说,它是沟通Model与View的桥梁,通过Notification&KVO与Model交互
- 对于View来说,它又要通过协议等来与controller交互
- 因此想要学会MVC,通知,协议等是必不可少的
代码说明
- 这个GitHub地址包括了两个工程,分别是同样效果对于使用MVC与不使用MVC的写法,可以进行对比,程序本身非常简单,基本上一看就懂,就不做详细说明了
- 这里我使用了通知,如果对于通知不是很了解,可以看我这篇博客