M = Model,个人理解为业务逻辑,也就是你的程序处理了一些什么样的业务,一般是一系列的API供Controller调用
V = View,视图,也就是你的程序外观、UI,你所能看到,触摸到的,程序的展现
C = Controller,控制器,个人理解为程序逻辑,作为M和V沟通的桥梁,在iOS开发中经常被放在和V一起
MVC的目的就是解耦。或者应该说一切模式的目的都是为了解耦。
如图所示,M和V是不能直接通讯的,只能通过Controller,Controller就是整个程序的逻辑.
Controller可以用Model的API,指挥Model做任何事情,而Model只能被动,比如KVO,发送Notification。
View也不能直接操作Controller,但可以通过委托的方式,很好的例子就是UITableView,UITableView要显示的数据,多少条,每条的内容,就在Controller实现UITableViewDataSource协议,并让该Controller成为列表的委托(self.tableView.dataSource = self;),然后View想要什么就问Controller拿,Controller再问M拿,拿到了View就进行显示。执行了操作也是类似的,就是UITableViewDelegate,这里就不再赘述。其他的一些控件,比如UIButton,UISwitch等可以通过target-action的形式操作Controller。
MV分离的好处是,你可以写好一套业务逻辑M,然后iPad和iPhone只用写V和C就可以了,M还可以放在同一个Project里面,分target编译iPad和iPhone版本,这样维护起来就不会出现功能增加,需要维护iPad和iPhone两个版本的头疼问题了,也不用担心漏改。同时程序的逻辑也更加的清晰,维护起来也比较轻松。
以上纯属个人对MVC理解,可能有不恰当,不对的地方恳请指出。
希望iOS的开发者们可以多多交流分享,共同进步