以下是课程笔记,仅供以后复习之便。

1.什么是MVC?

(1) Model:如飞机激战的游戏中,太空中的飞船,什么机型,每个飞船有多少机枪,多少护甲,这些硬件组成是model。

(2)Controller: 控制model如何在UI上展现给user。Controller的工作是把Model的信息传达给View,响应所有的delegation,因为它能获得Model里的数据, 决定怎么在屏幕上显示,这是它的职能。

(3)View:View是很通用的,是Controller使用的工具,应尽可能的使View阵营里的对象通用化。View不是它显示的数据的所有者,View只是一个平面,用来显示数据,它是一个显示信息的平台。View没有实体变量也不会存储,只有指向他们的指针。View是通用的用来显示的。Controller利用这些通用View来做Model需要做的事情。

View不拥有它所显示的数据,它是如何获得数据的呢?一个类似delegation的方法,它有一些协议,如data at和count,View根据需要去请求数据,非常高效(比如ipad中有10000首歌,但屏幕上只显示7首)。类似地,View会有一个数据源的设置,Controller会回应数据源。注意,数据源的代理delegation永远永远是Controller,或者是Controller指定的第三方,但不可能是Model。

2. MVC的通信方式

(1)Controller用来把Model展现在屏幕上,所以Controller对Model有完全访问权。

(2)Controller可直接与View对话,如:设标志,让View做些东西,在屏幕上排列View,数据通信。Outlet是Controller用来和View通信的属性,所以,我们要在Controller里创建outlets传到View中去。

(3)Model永不和View通信。

(4)View对Controller的通信是不可见的,View不知道在和谁通话(Controller控制如何在屏幕展现Model)

(5)View向Controller通信的方法

a)结构的方法,target action,Controller自己画一个target,然后把一个action交给它的View,当View发生action事件,比如按钮被按,它会把action发到target,然后Controller就知道按钮被按了。View会报给Controller发生了什么,但View对Controller知道的并不多,只是简单地发送target action。

b)delegation是另一个View和Controller通信的方法。View告诉Controller(did、will、should),Controller把自己设为委托,设立一个协议,来回应(will、did、should),View不用知道回应的Controller是哪个类。

(6)广播。Model不能向Controller发话,如果Model里的数据改变了,如何更改controller呢?在iOS里我们实现的方法是用一个广播站,就像信息广播机制,有2个机制:通知(Notification)和关键数据监听(KVO)。KVO也可用于View和Controller但不会是View和Model,View不会有面向Model的广播,View和Controller会互相有广播。

Model广播非常好用,因为是不可见的,但也有限制,只能通知被允许通知的对象发生了什么事。

(7)1个Model只有1个Controller。

Controller可以和其他人的View对话吗?通常Controller会有个指针指向另一个Controller来当做View,它会要求那个Controller来显示东西。所以,当Controller需要显示复杂东西的时候,它需要其他的Controller。

[Stanford 2011] MVC introduction的更多相关文章

  1. [Stanford 2011] Views 知识点

    一.view分层 (1)View的结构是分层的,一个view只能有一个父view,但可以有多个子view.子view的顺序是相关的,在数组中的位置越高或者说数字越大,就显示在后面,位置低的显示在前面. ...

  2. [Stanford 2011] Ordinary Calculator(By myself)

    说明: 前面的RPN计算器是按照stanford课程做的,是后缀表达式的计算.现在这个计算器是自己做的.这个是一般的计算器,即中缀表达式的计算,而且把计算过程也显示在屏幕上, 设计方法: 在Model ...

  3. [Stanford 2011] 知识点小结

    1.获得帮助:option+click /  option+double click 2.@property里的nonatomic,表示非原子性访问,atomic是obj-c里使用的一种线程保护技术, ...

  4. 斯坦福2011秋季 iPad and iPhone Application Development 资源

    1. MVC and Introduction to Objective-C (September 27, 2011) - HD 2. My First iOS App (September 29, ...

  5. 基于 Dojo toolkit 实现 web2.0 的 MVC 模式

    前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的 ...

  6. [转载]WIKI MVC模式

    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最 ...

  7. ASP.NET Core MVC 模型绑定 (转载)

    ASP.NET Core MVC的Model Binding会将HTTP Request数据,以映射的方式对应到参数中.基本上跟ASP.NET MVC差不多,但能Binding的来源更多了一些.本篇将 ...

  8. OpenGL管线(用经典管线代说着色器内部)

    图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性.OpenGL作为图形硬件标准,是最通用的图形管线版本.本文用自顶向下的思路来简单总结OpenGL图形管 ...

  9. (转) Awesome Deep Learning

    Awesome Deep Learning  Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...

随机推荐

  1. Unity3D脚本18:可视化辅助设置类 Gizmos

    Gizmos   类 Gizmos用于场景中给出一个可视化的调试或辅助设置. 所有的Gizmos绘制都必须在脚本的OnDrawGizmos或OnDrawGizmosSelected函数中完成. OnD ...

  2. Self Numbers[HDU1128]

    Self Numbers Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. CSS3 选择器——伪类选择器

    前面花了两节内容分别在<CSS3选择器——基本选择器>和<CSS3选择器——属性选择器>介绍了CSS3选择器中的基本选择器和属性选择器使用方法,今天要和大家一起学习CSS3选择 ...

  4. HDU 5044 (树链剖分+树状数组+点/边改查)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5044 题目大意:修改链上点,修改链上的边.查询所有点,查询所有边. 解题思路: 2014上海网赛的变 ...

  5. 【BZOJ】1027: [JSOI2007]合金(凸包+floyd)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1027 题意:$n$种材料,$m$种需求.每种材料有三个属性,给出三个属性的含量(和为1),问能否通过 ...

  6. APT 常用功能

    apt-get install package 安装包 apt-get reinstall package 重新安装包 apt-get upgrade 更新已安装的包 #apt-get update ...

  7. Scrum会议8(Beta版本)

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...

  8. spring boot结合thymeleaf

    1.在pom文件中加入thymeleaf相关的依赖 spring-boot-starter-thymeleaf 2.在resource文件夹下创建 template文件夹,在template文件夹中创 ...

  9. 利用反射得到android存储路径

    获得android手机的存储路径: public String getPrimaryStoragePath(){ try{ StorageManager sm = (StorageManager) c ...

  10. Syntactic_sugar

    https://en.wikipedia.org/wiki/Syntactic_sugar http://stackoverflow.com/questions/11366006/mysql-on-v ...