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


这是第一课,本文也参考了 系列博客。


1、iOS的概述-什么是iOS


MVC - 面向对象的概念


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




1、iOS的概述


内核


内核是mach 4.x BSD UNIX内核 mac OS  10操作系统,是个多任务的UNIX内核,一般是C语言。


在这层上提供了网络,socket,安全机制,文件系统,大部分这些api是c api,因为这写都是UNIX代码。我们不会在这层上写代码。



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





Core Sevices层


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


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



3、多媒体层


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


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




4、Cocoa Touch 层


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


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




主要有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模式关系,请记住这张图,后面讲的课经常提到些关系:


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




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





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



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





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




使用@property,就不需要自己写set和get方法;


nonatomic表示不是线程安全的,是在主线程中的,否则会生成复杂的锁线程程序,UI都要放在主线程中。





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



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





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



m文件中的@interface中的实现是private,对象指针需要内存,如果是对象指针,上面是wormhole必须要strong或weak。


strong表示保存这个指针对象的内存直到结束使用。weak表示如果没人使用了,就置nil。


所有的@property初始化为0,





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



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



PPT课件下载: