现在的位置: 首页 > 综合 > 正文

Objective-C 2.0 筆記 (7) MVC – Model View Controller 設計模式

2013年10月23日 ⁄ 综合 ⁄ 共 1212字 ⁄ 字号 评论关闭

(1) iPhone 手机程式,可不可以有好几个 Window?

 

在参考一些技术文件后,发现每一支程式,只能有一个 Windows,但是可以有好几个 View(各种类别的 View),加到 Windows 内,成为 sub-view,而 Windows 本身也是一个 View,只是比较特别的,没有 parent,自己本身就是 root。

 

(2) MVC 设计模式,在 Cocoa Touch SDK 里,应用的很普遍。

 

 

Model 主要用来管理资料跟状态,只管资料,而不管资料会以何种方法被呈现,通常也必须处理资料如何存取到硬碟上,相同的 Model 应该可以被重复使用,不需要修改界面。

 

View 则是想办法把 Model 的资料,呈现给用户,包括视觉,声音,跟其他。View 就只管如何呈现 Model 的资料就好。另外 View 也可以提供用户输入界面,让用户可以操作 Model 里的资料(透过 Controller),View 自己是不存任何资料的。同样的,View 应该设计成容易重复使用,而不需要修改界面。

 

Controller 则是介在 Model 跟 View 之间,当 Model 资料改变时,负责更新 View,当使用者透过 View 操作资料时,Controller 负责更新 Model 里的资料。

 

 

 

 

(3) 为何要用 MVC 设计模式?

 

首先,UIKit Framework 用 MVC 用的很广泛,如果希望写的程式,能够跟 UIKit 整合的很好,当然首选就是 MVC。这样做的好处很明显,你可以用 UI Builder 来设计你的 UI。

 

其次 MVC 将 Model 与 View 分离,一开始的时候,会觉得多此一举,但当程式复杂到一定程度后,能够单独处理 Model 不管资料将如何被呈现,及单独处理 View,而不用管资料是如何来的,能够大幅降低系统的复杂性。尤其是 UIKit Framework 又提供了许多常用的 View 的类别。

 

(4) 一个简单的范例

 

 

 

上面这个简单的例子,就是之前看过,有ㄧ个 slider 跟一个 label,拖动 slider,slider 目前的数值就会显示在 label 上。

 

UI Builder 在这里帮了我们大忙,透过 UI Builder,我们可以把 view 上的 slider 跟 label,指定给 controller 上的 outlet 变数 slider1 跟 label1,而 slider 被拖动时所发生的 event,也会指定给 controller 上的函式 updateValue。

 

有没有注意,我们完全不用管 view,UI Builder 跟 UIKit Frame  一声不响,就帮你处理掉了,而 UI 相关的程式撰写,在以前,这部份是最琐碎繁复,没人想去写的部份。

 

(5) 那 Model 呢?不是 MVC,有 View,有 Controller,那 Model (Data)呢?如果看到这里,你没有偷笑出来(心里想这个还需要问?),那表示你有过跟我一样的困惑,我可以告诉你答案,不过要 Charge $ 0.99。

 

未完,待续..........

 

 

抱歉!评论已关闭.