[Stanford 2011] MVC introduction
以下是课程笔记,仅供以后复习之便。
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的更多相关文章
- [Stanford 2011] Views 知识点
一.view分层 (1)View的结构是分层的,一个view只能有一个父view,但可以有多个子view.子view的顺序是相关的,在数组中的位置越高或者说数字越大,就显示在后面,位置低的显示在前面. ...
- [Stanford 2011] Ordinary Calculator(By myself)
说明: 前面的RPN计算器是按照stanford课程做的,是后缀表达式的计算.现在这个计算器是自己做的.这个是一般的计算器,即中缀表达式的计算,而且把计算过程也显示在屏幕上, 设计方法: 在Model ...
- [Stanford 2011] 知识点小结
1.获得帮助:option+click / option+double click 2.@property里的nonatomic,表示非原子性访问,atomic是obj-c里使用的一种线程保护技术, ...
- 斯坦福2011秋季 iPad and iPhone Application Development 资源
1. MVC and Introduction to Objective-C (September 27, 2011) - HD 2. My First iOS App (September 29, ...
- 基于 Dojo toolkit 实现 web2.0 的 MVC 模式
前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的 ...
- [转载]WIKI MVC模式
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最 ...
- ASP.NET Core MVC 模型绑定 (转载)
ASP.NET Core MVC的Model Binding会将HTTP Request数据,以映射的方式对应到参数中.基本上跟ASP.NET MVC差不多,但能Binding的来源更多了一些.本篇将 ...
- OpenGL管线(用经典管线代说着色器内部)
图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性.OpenGL作为图形硬件标准,是最通用的图形管线版本.本文用自顶向下的思路来简单总结OpenGL图形管 ...
- (转) Awesome Deep Learning
Awesome Deep Learning Table of Contents Free Online Books Courses Videos and Lectures Papers Tutori ...
随机推荐
- BZOJ1175 : [Balkan2007]The stairways of Saharna
杨氏图表,维护若干个单调不下降队列. 每次新加入一个数时,先考虑第一个队列: 如果可以放在最后,则放在最后. 否则找到最小的可以替换的替换掉,再将替换的数放入第二个队列,以此类推. 最后$ans_i= ...
- WIN7启动WIFI
启动虚拟无线AP netsh wlan set hostednetwork mode=allow ssid=WIFI_NAME key="abcdefgh" netsh wlan ...
- 配置当前用户使用豆瓣pip源
配置当前用户使用豆瓣pip源 mkdir ~/.pip/ cat ~/.pip/pip.conf [global] index-url = http://pypi.douban.com/simpl ...
- 清除 WD MyCloud 自动生成的 .wdmc 目录
1. 先 SSH,停止相应服务 /etc/init.d/wdmcserverd stop/etc/init.d/wdphotodbmergerd stop 2. 禁止服务自启动 update-rc.d ...
- jsp中如何取得当前页面完整的URL
JSP页面 <% String url = request.getScheme()+"://"+ request.getServerName()+request.getReq ...
- .NET生成静态页面的方案总结
转载自:http://www.cnblogs.com/cuihongyu3503319/archive/2012/12/06/2804233.html 方法一:在服务器上指定aspx网页,生成html ...
- 1.Java为什么能跨平台运行?请简述原理。
使用不同操作系统的JVM(JAVA虚拟机)解释运行编译好的字节码文件(.class)
- 在openGL中绘制图形
点的绘制.: glVertex*():星号表示函数要有后缀 该函数 需要放在glBegin函数和glEnd函数之间,glBegin函数的向量指定绘制图元的类型,而glEnd函数没有参数,例如: glB ...
- 程序中使用gc_enable() 和 gc_disable()开启和关闭
在理解PHP垃圾回收机制(GC)之前,先了解一下变量的存储. php中变量存在于一个zval的变量容器中.结构如下: 类型 值 is_ref refcount zval中,除了存储变量的类型和值之外, ...
- IE6 BUG 汇总
1.IE6双倍边距bug 当页面内有多个连续浮动时,如本页的图标列表是采用左浮动,此时设置li的左侧margin值时,在最左侧呈现双倍情况.如外边距设置为10px, 而左侧则呈现出20px,解决它的方 ...