iOS中的MVC设计模式

一、MVC概述

模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
  
二、MVC各部分意义详解
     
     1.模型对象

模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算 。例如,模型对象可能是表示游戏中的角色或地址簿中的联系人。用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达出去,最终会创建或更新模型对象。模型对象更改时(例如通过网络连接接收到新数据),它通知控制器对象,控制器对象更新相应的视图对象。

      2.视图对象

视图对象是应用程序中用户可以看见的对象。视图对象知道如何将自己绘制出来,并可能对用户的操作作出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。尽管如此,在 MVC 应用程序中,视图对象通常与模型对象分离。

在iOS应用程序开发中,所有的控件、窗口等都继承自 UIView,对应MVC中的V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。

     3.控制器对象

在应用程序的一个或多个视图对象和一个或多个模型对象之间,控制器对象充当媒介。控制器对象因此是同步管道程序,通过它,视图对象了解模型对象的更改,反之亦然。控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期。

控制器对象解释在视图对象中进行的用户操作,并将新的或更改过的数据传达给模型对象。模型对象更改时,一个控制器对象会将新的模型数据传达给视图对象,以便视图对象可以显示它。

对于不同的UIView,有相应的UIViewController,对应MVC中的C。例如在iOS上常用的UITableView,它所对应的Controller就是UITableViewController。

三、传统MVC交互模式

      1.Controller负责调度View和Model。用户操作View,View将交互动作传递至Controller,Controller通过Model更新数据做持久化存储,并重置View。

       2.View通过Model获取数据更新,然后显示数据更新。

iOS中的MVC设计模式 - 梁敬承 - 梁敬承技术笔记

四、苹果提倡的MVC交互模式:

1.Model和View永远不能相互通信,只能通过Controller传递。

2.Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信。

3.Controller可以直接与View对话,通过outlet,直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是Controller从Model中取得并经过加工了)。Controller是View的代理(delegate),以同步View与Controller。

iOS中的MVC设计模式 - 梁敬承 - 梁敬承技术笔记
 

五、iOS开发中现实的MVC交互模式

       在我们的iOS开发中,通常我们并没有按照苹果提倡的交互模式来组织我们的代码。

       iOS中的UIViewController将View和Controller集中在了一起,很多View的逻辑也是分布在了Controller中,导致View和Controller混合在一起,导致UIViewController臃肿而杂乱。

       就算我们使用XIB,但是并不是所有的View逻辑都能够在XIB中实现的。而且现在普遍都不怎么使用XIB了,都是用纯代码去实现UI,造成View逻辑就完全充斥在了Controller中。

iOS中的MVC设计模式 - 梁敬承 - 梁敬承技术笔记

       解决方法:创建UIView的子类,把所有的View逻辑抽离到子类中,让Controller单纯的充当控制器的角色。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值