CS193P第四堂课摘要及心得笔记

发布时间:2020-06-06

在历经前面几堂课的洗礼,相信各位读者一定已经对 Obj-C 有个深刻的体验。接下来在这堂课中,我们将进一步的前进到 iPhone 的程式运作以及 MVC 的架构,你準备好了吗?

iPhone 程式运作週期

在一般正常可以运作的 iPhone 程式当中,通常会包含以下四个部份:

CS193P第四堂课摘要及心得笔记

而一个程式的生命週期又可以分成五个阶段,分别是:

  1. 启动程式
  2. 初始化程式
  3. 读取 main nib
  4. 等候 event
  5. 处理 event,然后回到 4
  6. 离开程式
UIKit Framework

我们在前面几次的笔记中曾经屡次谈到 UIKit Framework 在 iPhone 开发上扮演着很重要的功能,它不仅提供了基本的 UI 元素,也帮助了我们解决了许多问题。

UIKit 也帮助我们启动应用程式,所有的应用程式都会有一个单独的 UIApplication 物件,这个物件会帮助我们协调处理上面所提到的物件的各个阶段,也会帮我们分配 event、管理状态列和程式在主画面上的数字显示。

不过为了使用这个 UIApplication 这个类别,我们并不会产生一个子物件去继承 UIApplication,我们使用的是 delegation 的概念。所谓的 delegate 就是委派的意思。也就是当我们要使用 UIApplication 及许多其他的 UIKit 类别时,我们并不会继承这个複杂的类别,而是用一个类别去包含这些物件变数。

诚如我们上面谈的,因为 UIApplication 是每个 iPhone 软体必备的,所以在 Xcode 建立专案的同时,他就会帮我们建立起一组 UIApplication 的 Delegate,并且让我们可以自行实做一些 UIApplication 会呼叫的方法,像是:

- applicationDidFinishLaunching:application; - applicationWillTerminate:application; - applicationWillResignActive:application; - application:application handleOpenURL:url; - applicationDidReceiveMemoryWarning:application;

这些方法包含了当然程式结束、或是记忆体过低等状况时,所需要做的一些处理。

Info.plist

在这个档案中,他记载了:

要修改这些内容,在 Xcode 下左手边的清单中,对 Targets 中你的程式按右键选择 Get Info,然后选择 Properties 就可以看到这些设定了!

Model/View/Controller
CS193P第四堂课摘要及心得笔记

MVC 架构是现代软体设计中很常见的一种设计模式,就如同他命名一般,软体被分成了三块:

Model 负责管理程式的资料以及状态,同样的 Model 在程式中的不同介面应该要能够拥有一致的操作,以便重複利用。

View 负责把 Model 呈现到使用者介面,作为使用者操作资料的介面。它本身不处理资料相关的程式逻辑,所以如果即便套用上不同的 Model,理论上同一份 View 都能够搭配显示。

Controller 负责处理 Model 跟 View 中间的程式逻辑,使用者面对 View 进行资料的操作,而当 View 接受到这些指令,他就会把这些讯息传递给 Controller,Controller 在根据不同的 Model 进行操作。

在 iPhone 中,一个 Controller 会包含了 outlets 和 actions,outlet 就是 View 跟 Model,而当使用者对 View,也就是使用者见面做操作的时候,就会呼叫 Controller 的 action,而 Controller 在针对 Model 去处理。

Nib
CS193P第四堂课摘要及心得笔记

Interface Builder 所产生的 Nib 档提供了我们一种视觉化、简易的方法,来设计 MVC 中的 View,虽然在新版的 Cocoa 中副档名已经改为 xib,不过在苹果的官方文件中仍然统称为 Nib 档。而 Nib 档除了可以排列 UI 元素之外,也可以用增加 controller 物件并且连结 controller 到 UI 上,这些动作会在 Nib 档被读取的同时完成。

然而,我们可以透过实做- awakeFromNib 这个方法,让程式在读取完 Nib 档后进行一些客制化的操作,像是把程式恢复到上次关闭的状态、或是自动开启最后一只档案等等。

Target-Action

每个 View 的物件可能会发生很多不同种的事件,像是有:

  • 值的改变
  • 编辑事件
  • 当一个事件发生时,iPhone 程式会自动呼叫目标物件的相对应动作 ,而这个物件就是 MVC 架构中的 controller。在课程投影片的第 42 张有很详细的图解,如果有不清楚的部份,可以提供参考。

    至于我们要如何设定这些 event 和 target 还有 action 的关係呢?我们可以在 Interface Builder 上透过简单的拖曳就可以完成设定,并不需要自己慢慢去撰写物件的关联性。

    CS193P第四堂课摘要及心得笔记

    而 event 所要呼叫的 action,有三种不同的形式,都可以使用:

    - actionMethod; - actionMethod:sender; - actionMethod:sender withEvent:event;

    最后面一种,其传入的 UIEvent 物件会详细纪录关于事件发生的一些细节,如果需要一些比较细微的处理,就很适合最后一种的形式。

    值得注意的是,在 iPhone 平台上,一个事件可以同时触发多个不同的 action,跟 Mac 上的开发环境有所不同。

    结论

    在这次的心得笔记连载中,我们针对了 UIKit 跟 MVC 架构做了粗浅的介绍,也学习了关于 Nib 档的知识以及如何将 View 连结到 Controller 上。在下一次的连载当中,我们将会先就第二次的作业进行讨论,以及讲解一些作业中困难的部份,还请大家继续收看!

    参考资源

    上一篇: 下一篇:

    相关搜索