1

这节课主要讲了两个东西:
1. iOS 概述
2. MVC 讲解

iOS 概述

iOS Overview

iOS分为四层,最底层为Core OS,是一个Unix内核,也就是Mac OS 10。上层为Core Services,即核心服务层,提供较为面向对象的API,可以把它当成是提供面向对象支持的Core OS的封装。再上一层为Media,提供多媒体API的支持。顶层为Cocoa Touch,我们开发应用时大部分都是在这层上进行。

MVC

  • MVC包含三个部分(Model,View,Controller)。
  • Model用来储存数据,比如你有个打飞机的应用,那么飞机的飞行高度、有几个机枪、血量、飞行速度等这些数据都是存储在此。要特别注意的是,Model不是用来处理UI的 ,比如飞机在屏幕的哪个位置、飞机的形状是怎样的等等这些有关UI 的都与Model无关。Controller拥有访问Model的所有权限,那么它们之间是如何通信的呢?这就用到了Notification&KVO(通知和关键数据监听)机制,当Model里的数据改变时(例如飞机受伤了导致血量下降),它就通过KVO机制进行广播通信,由于Model是Controller的被观察对象,所以当Model进行广播时,Controller作为观察者就会接收到来自Model的信息,然后再告诉View要进行相应的UI处理。
  • View就像Controller的仆人,它听从Controller的指挥以用来处理UI。它们之间通过outlet进行通信。target,Controller通过创建target接收来自View的action,比如View的控制条被滑动了或者button被点击。View并不了解Controller的任何信息,它只简单的与Controller进行通信,那么它们之间如何进行同步呢?上图中的should、will、did就是用来告诉View应该做的、将要发生的和已经发生的,这么做的原因是Controller把自己设为delegate(委托),这是另一种通信方式。还有一个重要的事是,View并不是它显示的数据的所有者,即View不拥有数据。如果View不拥有数据那么它如何显示数据呢?这就是另一种类似delegate的通信协议,例如上图的data at和count方法。这就可以去查询表中的数据,比如我的iPod有1000首歌,而我的屏幕只能显示其中的10首,View就可以通过需求去请求数据,这非常高效。但不要把这功能写到View中,因为View只显示数据,Controller和Model一起有效的提供数据。类似的,View有一个数据源的设置,即上图的data source,Controller会回应数据。注意:数据源的delegate永远是Controller或Controller设置的第三方,但不可能是Model。Controller的工作是把Model的数据传递给View,响应所有的delegate。Controller获取Model然后显示在屏幕上,Model和View之间不会进行通信,这些工作都有Controller来执行。

jkyin
286 声望13 粉丝

iOS developer.