国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

讀書筆記-常用設計模式之MVC

2019-11-14 18:15:59
字體:
來源:轉載
供稿:網友

1、MVC(Model-View-Controller,模型-視圖-控制器)模式是相當古老的設計模式之一,它最早出現在SmallTalk語言中。MVC模式是一種復合設計模式,由“觀察者”(Observer)模式、“策略”(Strategy)模式和“合成”(Composite)模式等組成。MVC模式由3個部分組成,如圖

模型:保存應用數據的狀態,回應視圖對狀態的查詢,處理應用業務邏輯,完成應用的功能,將狀態的變化通知視圖。

視圖:為用戶展示信息并提供接口。用戶通過視圖向控制器發出動作請求,然后再向模型發出查詢狀態的申請,而模型狀態的變化會通知給視圖。

控制器:接收用戶請求,根據請求更新模型。另外,控制器還會更新所選擇的視圖作為對用戶請求的回應。控制器是視圖和模型的媒介,可以降低視圖和模型的耦合度,使視圖和模型的權責更加清晰,從而提高開發效率。

對應哲學中的“內容”與“形式”,在MVC模型中,模式是“內容”,它存儲了視圖所需要的數據。視圖是“型式”,是外部表現方式,而控制器是它們的媒介。

2、上面我們討論的是通用的MVC模式,而Cocoa和Cocoa Touch框架中的MVC模式與傳統的MVC模式略有不同,前者的模型與視圖不能進行任何通信,所有的通信都是通過控制器完成的,如下圖。

 

接下來我們通過一個案例來分析Cocoa Touch中MVC模式的運作過程,案例界面如上圖(中)。

打開MVCSample工程,其中包括的文件有AppDelegate.h、AppDelegate.m、ViewController.h、ViewController.m和MainStoryboard.storyboard。

AppDelegate是應用程序委托對象,ViewController是視圖控制器,但沒有看到視圖和模型。打開故事板文件,可以看到ViewController Scene(上圖右),就能看到View,其中直接使用了UIKit框架中的UIView,因此在MVCSample組中沒有視圖,屬于視圖的還有Button和Text Field,他們是View的子視圖。那么模型對象在哪呢?模型對象很特殊,起本質是視圖的“數據”。Text Field輸入的內容,Button上的便簽,都可以說是模型,但是模型與視圖一樣,有時候我們未必需要自己創建一個模型類。因此我們做開發工作時,主要是編寫視圖控制器。下面我們看看視圖控制器ViewController.h文件的代碼:

1 @interface ViewController : UIViewController<UITextFieldDelegate>2 3 @PRoperty (weak, nonatomic) IBOutlet UIButton *myButton;4 @property (weak, nonatomic) IBOutlet UITextField *myTextField;5 - (IBAction)myAction:(id)sender;6 7 @end

可以看到,ViewController.h為兩個空間myButton和myTextField定義了兩個IBOutlet(輸出口)類型的屬性。因為要通過視圖控制器更新這些視圖(控件也屬于視圖),所以我們需要把這些視圖定義成輸出口類型的屬性。

此外,ViewController.h還定義了 - (IBAction)myAction:(id)sender; 方法以相應myButton按鈕的觸摸事件。該方法的返回類型是IBAction(動作事件),這說明該方法可以相應控制事件的。

另外,ViewController還實現了UITextFieldDelegate協議,這樣ViewController就變成了UITextField空間的委托對象,它們之間的運作關系如圖:

①當用戶觸摸myButton的時候會觸發ViewController中的  - (IBAction)myAction:(id)sender 方法。

②視圖控制器會實現一些空間委托和數據源協議,這要看具體的控件。在此案例中,ViewController實現了UITextFiledDelegate協議,其中定義了一些相應UITextField事件的方法。

③視圖控制器通過屬性myButton和myTextField來改變控件的狀態。

④模型對象可以通過通知和KVO機制來通知數據的變化。

⑤視圖控制器可以保存一個模型成員變量或屬性,并通過它們改變模型的狀態。

 

資料:《iOS開發指南》


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莒南县| 邓州市| 余干县| 福安市| 洞口县| 永川市| 嘉黎县| 通江县| 普兰店市| 桃园县| 汝南县| 图片| 扎兰屯市| 大埔县| 延庆县| 辽宁省| 青河县| 湄潭县| 丹巴县| 游戏| 景洪市| 巫山县| 清水河县| 耿马| 清远市| 鹿泉市| 安图县| 化州市| 策勒县| 五河县| 宁津县| 扶余县| 武城县| 依兰县| 大田县| 虎林市| 志丹县| 焦作市| 吉木萨尔县| 礼泉县| 黄骅市|