斯坦福大学iOS应用开发教程学习笔记(第一课) MVC/Objective-C

最近准备学习学习iOS,心情好看看书,不好看看视频吧。


这是第一课,本文也参考了http://blog.csdn.net/totogo2010/article/details/8205810 系列博客。

1、iOS的概述-什么是iOS
2、 MVC - 面向对象的概念
3、 Objective-C-介绍下语言的概念

1、iOS的概述

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


2、 Core Sevices层

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



3、多媒体层

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




4、Cocoa Touch 层

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



主要有Foundatition/UIKit

2、MVC

3个阵营 :model  view  controller 


model 

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

controller

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

view 

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

controller用这些通用的view做model想要做的事情。


相互之间管理和通信。

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

controller->view  完全允许 。 主要是outlet,通讯属性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进行同步,controller还可以将自己设置为view的delegate。
view 和controller还有别的通讯机制,比如view要告诉controller发生什么事情 ,将要发生什么事情,或询问是否允许,用到了will did should 。controller把自己设置成委托,用协议来完成委托。来回应will,did,should。这时候,view 还是不知道回应的controller是哪个类。

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

那view如何获取数据呢?

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

数据源的delegation永远是controller,不可能是model。 
model和UI始终是独立的。

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

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

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




3、 objective-c语言的基本概念




.h文件里面@intetface是声明的public方法,.m文件里面@intetface声明的是private方法




使用@property,就不需要自己写set和get方法;
nonatomic表示不是线程安全的,是在主线程中的,否则会生成复杂的锁线程程序,UI都要放在主线程中。



在.m文件中可以使用@synthesize,实现数据成员的set和get方法,使用一些内存保存该值。@synthesize的实现方法如下所示:



. m文件中的@interface中的实现是private,对象指针需要内存,如果是对象指针,上面是wormhole必须要strong或weak。
strong表示保存这个指针对象的内存直到结束使用。weak表示如果没人使用了,就置nil。
所有的@property初始化为0,



@synthesize只是建了一个指针,还需要set进行初始化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值