IOS学习之斯坦福大学 IOS开发课程笔记(第一课)

网易公开课上可以看,听课的好处在于,它的节奏比较快,你要适应这个节奏,就会查阅相关用到的知识,这个过程中,就掌握了很多东西。

 

 

我会把每节课的笔记都整理成博文,主要的目的还是备忘。还有一点就是,在csdn上看到了容芳志写得关于这个课程的专栏,很受启发。容芳志的专栏地址如下:

 

http://blog.csdn.net/column/details/stanford-ios.html

 

 

一 课程简介

 

这是斯坦福大学2011年下半学期的课程,老师的名字是Paul Hegarty. 这个老头相当严厉,从他对作业的要求就可以看得出来。 Paul Hegarty毕业于斯坦福大学,有在apple的工作经历,从他的讲课时的编程功底也能看得出。技术无关的话题不多说了,有兴趣的可以去网易公开课看看。

 

 

二 IOS架构

主要分为四层,从下往上分别是core OS, core Services, Media, Cocoa touch.

 

1 core OS

 

IOS学习之斯坦福大学 IOS开发课程笔记(第一课)_第1张图片

系统最底层,都是基于C的unix下的api, 主要提供诸如安全, 文件系统等基础服务. 这一层离我们开发上层应用有些遥远,想了解更深入,可以看看unix操作系统相关的资料.

 

2 core service

IOS学习之斯坦福大学 IOS开发课程笔记(第一课)_第2张图片

 

这一层提供的功能和上面有些重叠,不过它是基于对象的架构了,比如像socket, 多线程,数据库,集合等操作,都是用面向对象的API提供,这一层提供的服务已经开始充斥在我们的代码的各个角落里了.

 

3 media

 IOS学习之斯坦福大学 IOS开发课程笔记(第一课)_第3张图片

这一层就不多说了,很明显,图像,视频,动画,游戏相关的API,类都是这里提供的.

 

4 cooca touch

IOS学习之斯坦福大学 IOS开发课程笔记(第一课)_第4张图片

 

这一层可以理解为你在开发过程中,能直观的马上感受的东西,比如一个view里面的按钮,提示框,触摸,位置布局等.

 

 

三 关于MVC

先上一幅图,再慢慢详述。这个图相当给力,你试一下在网上搜索ios MVC, 很多资料里都可以看到引用了这个图,我相信这个图最初的源头,正是斯坦福大学。

IOS学习之斯坦福大学 IOS开发课程笔记(第一课)_第5张图片

 

MVC就是 Model-VIew-Controller,即模型视图控制器。

 

Model可以理解成你的程序要干的事情,或者说它的功能,比如你要开发一款星际争霸的游戏,你要设定有多少个行星,多少飞船,每个飞船的怎样的武器装备等等这些都属于model的范畴。至于说飞船应该在屏幕的哪个位置,则完全不属于model的范畴。

 

Controller的作用是,把model描述的东西,在屏幕显示出来。

 

View这里被描述成controller的”小跟班”, 当controller需要把model里的东西显示出来的时候,它需要利用view中的objects来辅助. 所以controller和view是相辅相成的。

 

再说说他们三个之间的联系和通信机制。看上图,controller可以控制model, 可以向model发送指令.因为他要把model呈现出来,所以必须对model有完全的控制权。

 

Controller对view也是有同样的控制权,因为他需要view的功能来把model呈现出来. 举个例子,我们用过outlet, 比如给屏幕上的按钮建立一个outlet,controller就可以通过这个outlet给view发消息,实现改变按钮的大小,位置等操作。

 

Model和view之间没有任何联系,不会通信. 假设说你现在有个工程不需要controller,完全用view来体现model, 理论上来说是可以的,但是这个代码的复用性就不高了,因为一旦你的model变化了,view也要随着一起变,这个view就没法复用。同样的这个model也没法复用。 要仔细的体会这一段。

 

View可以给controller发消息吗? 同样也是可以的. 比如我们给按钮建立一个action的连接,当按下按钮时,controller就会收到消息.这是其中一种从view到controller的通信机制。还有一种方式是controller把自己作为view的delegate(要实现某种协议), 这样当view有什么通知时,可以通过个delegate完成. 这种方法也是用得很多的,比如我前面的tableview系列的博客示例,里面用到delegation和datasource都是基于这个的。

 

Model会给controller发消息吗? 答案是肯定的,方法是通过KVO模型,KVO是什么不在这里讲了,自己去google.  用在这里,就是当model中的属性改变时,可以通知到controller了. Controller是观察者,model是被观察者. 比如飞船被炸毁了一个,controller获取通知后,在屏幕上把它移除。

你可能感兴趣的:(IOS学习笔记,斯坦福大学,mvc,ios开发,ios)