一、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. 自己珍藏一些有趣的Python子程序
  2. webpack4.0--如何安装和配置(一)
  3. datatable导出Excel
  4. ubuntu下软件删除
  5. JVM性能调优监控工具使用详解
  6. poj 2390 Bank Interest(计算本利和)
  7. java jdk win10安装_Java 安装 JDK WIN10
  8. [原创]二维数组的动态分配及参数传递
  9. 真正的创业是什么感觉?
  10. 人工智能--框架表示法
  11. 有趣的智力题和概率题
  12. 科研论文阅读与写作实战技巧
  13. 女性吃什么食物会导致不孕?
  14. 玫琳凯携手联合国机构推出女性创业加速器计划
  15. Ubuntu 18.04 LTS系统主题美化
  16. Studio 3T重置日期,达到重复试用的效果
  17. twitter php_php调用twitter api
  18. 用C语言在NDS上编写程序
  19. 关于新型冠状病毒感染肺炎中国医学科学院专家组答疑解惑
  20. php 7天余额显示不出来的,为何我在余额宝里面放了两千元钱,三天以后还是看不到收益?请问手机余额宝的收益在哪里可以看到?还有余...

热门文章

  1. 04.MyBatis别名的设置和类型转换器
  2. 用注册表禁止windows添加新用户
  3. 排序算法Java实现(基数排序)
  4. 怎样写出简洁的css代码??★★★★
  5. Firebug控制台详解[转]
  6. Net C# 扩展方法
  7. 操作系统——文件基本概念
  8. 虚拟机 NAT模式与桥接模式的区别
  9. C语言中关于字符数组输入,scanf没执行
  10. post发送byte数组_KAFKA消息发送