blog.csdn.net/totogo2010/article/details/8205810 
 

2011年冬季斯坦福大学公开课 iOS应用开发教程是个很经典的教程,这个老头讲的很给力。做笔记总结。

第一课名称: MVC and Introduction to Objective-C

这课的主要内容有:

iOS的概述  -什么是iOS

MVC - 面向对象的概念

Objective-C-介绍下语言的概念

iOS包括四层

内核

内核是mach 4.x BSD UNIX内核 mac OS  10操作系统,是个多任务的UNIX内核,在这层上提供了网络,socket ,安全机制,文件系统,大部分这些api是c api 因为这写都是UNIX代码。我们不会在这层上写代码。

Core Sevices层

这层开始面向对象了,提供了很多底层服务。提供运行时,多线程等。还有集合类,数组,字典啊。可以把这层当做提供了面向对象的Core OS的封装。

多媒体层

好像离硬件更远了,其实是还是很近, iPhone  iPod iPad都是多媒体设备, 多媒体相关的代码贯彻了整个iOS,在开发者眼中 core services都是多媒体的api。

Cocoa Touch 层

我们的 90%时间都用在这层, 按钮,滚动条,各种控件等。

介绍平台的组成:

工具: XCode 4

语言:objective-c

Framework  foundation   UIKit

设计模式

重点介绍下MVC

三大阵营: model  view  controller

model

描述的是你的程序是什么。比如一个太空船的程序,比如飞船的位置,型号,飞船有多少个机枪,护甲多少。

controller

描述你的是model如何展现在用户面前,它获取到了飞船在太空中的位置,然后算出来怎么在屏幕上展现出来。比如飞船的多个机枪如何在屏幕上展现。总之controller控制如何在UI上展现model。

view

是controller的小弟,view是工具。尽可能是view通用的,按钮,滚动条等,决不能包含任何如何去表现的逻辑。controller用这些通用的view做model想要做的事情。

有了这三个阵营,剩下的就是他们之间管理和通信了。

controller->model 完全允许。因为controller 要问model如何在屏幕展现内容。

controller->view  完全允许 。  通讯属性outlet,在controller里创建outlets传输到view中。

model---view  之间永远不会通讯。因为model和界面没有关系。view是要重用的,model和view关联,当model改变后,view得重写。

view->controller 通过 target action这个结构来通讯。controller自己画了个 target(目标) ,然后把action(动作)交给view。当view发生一些事情,比如按钮被按下,它把action 发送到target,这时候controller就知道了。view 和controller还有别的通讯机制,比如view要告诉controller发生什么事情 ,将要发生什么事情,或询问是否允许,用到了will did should 。controller把自己设置成委托,用协议来完成委托。来回应will,did,should。这时候,view 还是不知道回应的controller是哪个类。

记住:views 不拥有它们展示的数据。

那view如何获取数据呢?

通过协议获取,delegation 方法,比如data at , count.

数据源的delegation永远是controller,不可能是model。

三大阵营的工作流程是这样的:controller去model那取数据,告诉view展现数据在屏幕上。即使只有一行代码,也得有controller来参与,不能坏了规矩。

model不能主动勾搭controller,那model数据有变化了,那怎么让controller知道呢?Notification 或KVO机制。当model数据改变,它就广播,controller就收到了。

MVC模式关系,请记住这张图,后面讲的课经常提到些关系:

mvc群:

当很多个model ,controller, view时,组成了mvc 群,还是要遵循上面的规则。

objective-c语言的基本概念。

objective- c是c的超集,import 的使用,@property替代了原来类里的实例变量,当然实例变量也可以使用,@property帮你自动生成getter 和setter,@property之后就可以用点号 self.topSpeed访问变量了,相当于[self topSpeed]

  1. @interface Spaceship()
  2. // declaration of private methods (as needed)
  3. @end

通过这样的方式声明私有的方法。

个人感觉这里讲的语法不太利于国人理解,比较繁琐。这里讲的objective-c类方面的之后可以参考:

Objective-C语法之类和对象

可能更容易理解。

斯坦福官方所有教程对应的源码,作业,ppt下载地址:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2011-fall

最新文章

  1. 安装phpstudy之后发现80端口被占用
  2. [CareerCup] 6.6 Toggle Lockers 切换锁的状态
  3. 索引深入浅出(5/10):非聚集索引的B树结构在堆表
  4. BizTalk动手实验(八)消息路由
  5. Linux下的PostgreSQL简单安装手册
  6. 性能测试类,让你写法代码养成经常测试的好习惯 -ASP.NET C#
  7. ubuntu ipv6网络电视(avplay)
  8. gprof
  9. bootstrap响应式网页设计的9条基本原则!
  10. 根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用
  11. 教你如何利用初级C#语言更改银行存款!!!!
  12. 纯JavaScript实现HTML5 Canvas六种特效滤镜
  13. Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
  14. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
  15. linux 下 启动oracle
  16. Hash Table Performance in R: Part I(转)
  17. eclipse导入包之后中文乱码
  18. 简单剖析Node中的事件监听机制(一)
  19. springMVC一个Controller处理所有用户请求的并发问题(转)
  20. WPF技术实现控件截图

热门文章

  1. php 安装redis扩展
  2. MongoDB中通过MapReduce实现合计Sum功能及返回格式不一致问题分析
  3. android任意view爆炸效果--第三方开源--ExplosionField
  4. APK反编译之一
  5. 配置github上的SSH key及上传自己的项目到github
  6. bat文件编写(无线承载网络设置)
  7. 2天驾驭DIV+CSS (基础篇)(转)
  8. wpa_supplicant 使用
  9. Objective-C中Block语法、Block使用以及通过Block实现数组排序
  10. 如何查看hadoop与hbase的版本匹配关系