012:在iOS中怎样理解MVC?看这幅图就够了!

关于MVC的资料非常多,可是在繁杂的资料中很难找到几个跟实际相结合又通俗易懂的,比较之下斯坦福iOS公开课保罗(被称为“白胡子老头”)讲的最易于理解又贴近实际开发环境,而斯坦福cs193p这套教程被无数iOS开发者视为必看教材。
下面是这幅图是第二课中讲解的关于MVC的内容:

Stanford cs193p lecture2
MVC是什么?
  • M:Model 数据模型
  • V:View 视图
  • C:Controller 控制器

其实MVC是一套代码优化以及合理管理的解决方案。

为什么用MVC?

据说最原始的编程是没有框架的原型,程序员的自由度相当高,每一个程序员都有一套自己的编程和管理代码的标准,不论孰优孰略,你可以想象一下把所有的代码都放到controller中的情形,MVC的出现很大程度上解决了controller中代码的冗余问题,并对代码进行了分类管理。关于MVC历史这里不赘述,详细可Google。

在iOS中是怎么是用MVC的?

下面让我们结合这张图分解下具体内容:

  • 1:Model,View和Controller分别用不同颜色的椭圆表示
  • 2:Controller和View中间的白色实线和白色虚线表示“Controller直接访问View,View不直接访问Controller”。
  • 3:Controller和Model中间的白色实线和白色虚线表示“Controller直接访问Model,Model不直接访问Controller”。
  • 4:Mode和View中间的黄色的双实线表示两个禁止访问。

Controller和View的具体的交互方式为:

1>:控制器直接访问view的属性(property),也就是在View中定义的outlet类型的控件,Controller对其直接访问。

2>:点击事件的传递,例如UIButton的target事件,View中的action对应Controller中的target(靶标),在View中的点击事件被传递给Controller中的target。

3>:利用delegate传递信息
最直接的是view的生命周期方法,在这不一一展开。

4>:表格数据源方法data source

Controller和Model的交互方式为:

Model就像一个电台,或者发报机,它是通过广播的形式跟Controller进行交互,具体实现方式是Notification和KVO

总结:
Controller统筹管理View和Model,所有的逻辑都是通过Controller进行管理,而View和Model没有直接的联系,互不访问。为什么M和V互不访问?你可以想象M里面是数组也就是数字,V里面是控件也就是Button等,两者没有什么关系,为了使设计更符合逻辑所以就禁止两者之间互相访问。

PS:
当然MVC也有其弊端,就是Controler的任务繁重,随着工程的日渐扩大,Controller中的业务逻辑也随其变的越来越复杂,这就导致工程不好维护,为了解决这一问题,则出现了MVVM。
MVVM的详解推荐objc中国的《MVVM介绍》这篇文章。

你可能感兴趣的:(012:在iOS中怎样理解MVC?看这幅图就够了!)