一、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获取数据更新,然后显示数据更新。
四、苹果提倡的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开发中,通常我们并没有按照苹果提倡的交互模式来组织我们的代码。
       iOS中的UIViewController将View和Controller集中在了一起,很多View的逻辑也是分布在了Controller中,导致View和Controller混合在一起,导致UIViewController臃肿而杂乱。
       就算我们使用XIB,但是并不是所有的View逻辑都能够在XIB中实现的。而且现在普遍都不怎么使用XIB了,都是用纯代码去实现UI,造成View逻辑就完全充斥在了Controller中。

解决方法:创建UIView的子类,把所有的View逻辑抽离到子类中,让Controller单纯的充当控制器的角色。

iOS中的MVC设计模式相关推荐

  1. IOS 中的MVC设计模式

    如何联系我:[万里虎]www.bravetiger.cn [QQ]3396726884 (咨询问题100元起,帮助解决问题500元起) [博客]http://www.cnblogs.com/kensh ...

  2. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  3. javacript中的mvc设计模式

    以下内容为原创翻译,翻译不对的地方还请原谅,凑合着看吧. 原文网址是: 来源:http://www.alexatnet.com/articles/model-view-controller-mvc-j ...

  4. iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  5. iOS中常用的设计模式

    iOS中常用的几种设计模式 iOS中常用的几种设计模式 1.代理模式 2. 观察者模式(通知机制,KVO机制) 4. 单例 5. 适配器() 6. 策略 9. 装饰器(Decorator) 10. 原 ...

  6. [原创]java WEB学习笔记18:java EE 中的MVC 设计模式(理论)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. IOS开发之MVC模式的介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.MVC模式(面试常问的) M:     Model(专门负责存储数据的类) V:     View  (专门用来展示数据) ...

  8. 什么是MVC设计模式???

    什么是MVC设计模式? MVC由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础.MVC结构是为那些需要为同样的数据提供多个视图的应用程 ...

  9. iOS中MVC设计模式

    在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(object)一样.但是理解和应用起来却非常困难.今天我们就简单总结一下MVC设计理念. MVC(Model V ...

最新文章

  1. 普华永道报告:区块链不只是比特币!将改变这8大领域|附下载
  2. HTTP长连接短连接
  3. 36. Valid Sudoku数独判断
  4. aws 服务器之间文件转发,aws bucket之间相互拷贝数据
  5. 服务器子系统是什么,服务器是什么样子的,服务器一般用什么系统!
  6. 小小一行Python命令,居然把电脑变成服务器
  7. Java跳转显示未找到,找不到index.jsp页面,没有跳转
  8. 系统引导的过程一般包括如下几步: 【 】_20190317工控维修日记(西门子系统第二讲)...
  9. 基于OpenCV的红绿灯识别代码解析
  10. 防止用户删除数据库表
  11. linux pae内核安装,CentOS6.9 32位 编译无 pae 内核
  12. celery+rabbitmq+redis 分布任务队列探索(一)
  13. 易筋SpringBoot 2.1 | 第四篇:RestTemplate方法详解(2)
  14. 计算机为啥系统保护设置不了,Win7系统下不能设置电脑屏幕保护程序的时间怎么办...
  15. Python在导入文件时的FileNotFoundError解决办法
  16. 华硕路由器修改 Hosts 以达到局域网内自定义解析
  17. android称重的技术,智能称重系统之智能地磅称解决方案
  18. 群晖emby服务端下载(弃坑,官网已经能顺畅访问)
  19. 2022科技公司薪酬排行榜,来了!
  20. 关于log4j的参数含义

热门文章

  1. 数据结构开发(3):线性表的顺序存储结构
  2. Lucene全文检索
  3. php 流(Stream)
  4. javascript数组扁平化处理
  5. lvalue-xvalue-prvalue
  6. Tomcat基础教程(一)
  7. WCF中的管道——管道类型
  8. .net 中使用socket (c#)
  9. 计算机网络(二十一)-数据链路层设备
  10. C语言中关于字符数组输入,scanf没执行