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介绍》这篇文章。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容