zoukankan      html  css  js  c++  java
  • 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    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
  • 相关阅读:
    【MVC 1】MVC+EF实体框架—原理解析
    数据结构导论(一)
    【JavaScript 14—学习总结】:从小事做起
    【JavaScript 13—应用总结】:锁屏遮罩
    【JavaScript 12—应用总结】:弹出登录框
    【JavaScript 11—应用总结】:下拉菜单
    【JavaScript 10—应用总结】:连缀
    【EF 1】EF实体框架 原理+实例
    【多 线 程】
    【命 令 行】
  • 原文地址:https://www.cnblogs.com/abasolution/p/4103756.html
Copyright © 2011-2022 走看看