iOS 00001 MVC模型

前言

很多人会好奇,为什么会在1之前为什么那么多零,有几个原因.


第一个原因来自于格拉德威尔在<异类>里面提出的1W小时理论,源自于此但是不止于此,iOS是个很庞大的系统,而且每年都有新的东西,以文章计数,不为凑数而写文章,学以致用;

第二个原因让自己清醒一下,至少有一件事情我只能算是刚入门,能写出APP的人,但是我不满足于此,在微博关注了很多大牛确实发现有很多需要进步学习的地方,Even though I am not smart,但是要拼一下;

第三个原因,我怕我会像工厂的机器人一样,给自己一点动力,不断冲刺,不断挑战自己,自己其实惰性很高的,所以我现在需要做的就是想尽一切办法刺激我。

步入正题

废话不多说,言归正传,其实我有的时候在想怎么学习iOS才是好的学习之道呢,我觉得这个在于自己。今天我首先要去搞定的是一个设计模式--MVC模式.

貌似MVC模式是一种在我写项目经验的时候都会是第一句话,当你在互联网搜索MVC模式,你会发现很多语言里面都有MVC.

1.简介

MVC(模型-视图-控制器)最早是Trygve Reenskaug在1978年提出的,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构.(源自:https://zh.wikipedia.org/wiki/MVC).在各个语言中基本都会发现他的踪影

2.iOS中的MVC模式

在iOS里面最出名的MVC模式讲述应该是下面的一张图,俗称白胡子教授MVC.


image



再说明三者关系之前,我们先关注图中MVC之间的六条线,基本上和交通规则是一样的,虚线可以跨越,而实现不能越过.那双黄线呢,更加不能跨越,而且很像中国的那道家里和邻居之间的那道墙,关系恶劣到谁都不能越过.

当我看到这个模型的第一瞬间,我就觉得这很像三个外星人在交流沟通.先说说最简单的模型(Model),他的上面有一个发射电波的东西,难道是要呼唤外星人吗?因为他的周围都被挡住了,他不能直接和控制器(Controller)沟通的,但是它是负责仓库的得告诉Controller该怎么存储,它想到一个办法就是通过Notification&KVO的方式去告之.Model永远不和View通讯.

打了这么多汉字,可能你已经看蒙圈了.IT工程师吗,都是一个想法:用代码改变世界.上代码

Objective-C 代码

//register notication
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodName) name:@"kBackNotication" object:nil];
  
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"小明" forKey:@"name"];
    
//post notication
[[NSNotificationCenter defaultCenter] postNotificationName:@"kBackNotication" object:nil userInfo:userInfo];
    
//remove notication
[[NSNotificationCenter defaultCenter] removeObserver:self];  
    }
    
//Handle notication todo sth.
- (void)methodName{
     //to do sth.
 }

Swift 代码

let eBackNotication = "eBackNotication"
//注册通知
NSNotificationCenter.defaultCenter().addObserver(self, selector: "doSTH", name: eBackNotication, object: nil)

let userInfo : Dictionary = ["name":"小明"]
//发送通知
NSNotificationCenter.defaultCenter().postNotificationName(eBackNotication, object: nil, userInfo: userInfo)
//移除通知
NSNotificationCenter.defaultCenter().removeObserver(self)

是不是很简单呢,再来看View和Controller之间的通讯,他们之间的感情的热闹的多.

<li>View 通过Action Target.像UIButton的事件处理
<li>View 的delegate,如UITableViewDelegate等
<li>View 的datasource,如UITableViewDataSource

其实在View和Controller之间的通讯最能体现MVC的模式核心价值观,通讯的时候你根本不需要知道是哪个Controller,View就可以通讯了,瞬间达到解耦合的目的.

Controller是最大的BOSS,它可以访问View,也可以访问Model.对于Model的访问,它直接强制使用.而使用view的会体现在IBOutlet.

但是我在实际开发会发现,Controller会变得很臃肿,其实你从图中也能看到这个问题,而发明MVC的设计模式的目的就是减少依赖,解耦合.但是让Controller变的臃肿也不是设计者想看到的,我们改如何处理呢?很大的疑问就产生了.

下次话题

互联网能让你很快的进步, 这取决你怎么使用这个产品.在互联网的帮助下,找到了解决的方法,就是MVVM,初见这个词语,你会觉得怎么好熟悉的感觉,没错,你的直觉是对的,就是从MVC继续把Controller拆解开来,解决臃肿的问题,那如何解决臃肿的问题呢?请听下回分解.

题外话

我内心一直在想,其实我在写这个系列的iOS文章,可能一开始很多文章是再次总结很多人的文章,自己的思考会很少.我的想法是我要用这种办法开始刺激我思考而不是总在等着技术别人喂给你,也要争取早一天能第一个去尝试新技术,做分享.其实这个是不断进步的步骤,我记得学美术很多都是从临摹开始的,在你临摹的时候不是让你机械的去重复copy,你要去思考.我想用这种模式刺激我思考.也希望建立起来属于我自己的知识体系.

参考资源

1、http://blog.devtang.com/blog/2012/02/05/mvc-in-ios-develop/ 唐巧这篇文章还让我学到了一些其它技巧,很受用.

2、https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html#//apple_ref/doc/uid/TP40010810-CH14-SW1 虽然我没使用这篇文章,但是苹果的文档价值确实很高.

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

推荐阅读更多精彩内容