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

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. BZOJ2584 : [Wc2012]memory

    xy方向分开考虑 用扫描线处理出拓扑序,第二问直接回答拓扑序, 第一问: 将操作倒过来,变成加入线段,用线段树维护区间拓扑序的最值 #include<cstdio> #include< ...

  2. Grunt配置文件编写技巧及示范

    受益于grunt这么久,继续分享关于grunt的一些技巧.grunt确实是前端项目中不可或缺的提升效率的工具.第一次接触grunt是在去年7月份,开始有接触LESS.Coffee Script的等需要 ...

  3. Java/Js下使用正则表达式匹配嵌套Html标签

    转自:http://www.jb51.net/article/24422.htm 以前写过一篇文章讲解如何使用正则表达式完美解决Html嵌套标签的匹配问题(使用正则表达式匹配嵌套Html标签),但是里 ...

  4. Solve error: 'class vtkImageActor' has no member named 'SetInput'

    Replacement of SetInput() with SetInputData() and SetInputConnection() someFilter->SetInput(someR ...

  5. 通过console口连接交换机

    最近发现有人不会通过console口连接交换机. 想想当初我还是小白的时候也是如此啊,如是写下教程. 虽然略简单... 1.连线: console线:(Console---usb) 2.安装驱动 (可 ...

  6. PHP将在对象被销毁前调用这个函数.它称为析构函数

    -构造函数和析构函数 如果你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行.清楚地说,__是两个下划线.就像其它任何函数一样,构造函数 ...

  7. Powershell连接Office 365各组件的方法

    参考: http://www.exchangecn.com/office365/20150108_540.html 1. 适用于 IT 专业人员 RTW 的 Microsoft Online Serv ...

  8. 9. Add the Block Storage service

    Block Storage Server: 1. sudo apt-get install python-mysqldb   2. sudo apt-get install lvm2   3. 创建存 ...

  9. Yii2 验证码不显示

    siteController 中,要将captcha 列为任意用户可以访问

  10. ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )

    //TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...