caoporm97国产在线视频|欧美性XXXXX精品|一本一道久久a久久精品综合开|精品久久久久久久久久久AⅤ|

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

ios設(shè)計(jì)模式之MVC模式

百恒網(wǎng)絡(luò) 2017-04-07 5005

關(guān)于iOS開發(fā),我們之前重點(diǎn)分析了Cocoa框架下的單例模式、委托模式和觀察者模式,今天我們繼續(xù)和南昌APP開發(fā)制作公司小編來(lái)學(xué)習(xí)iOS常用設(shè)計(jì)模式中的MVC模式。MVC模式是相當(dāng)古老的設(shè)計(jì)模式之一,它最早出現(xiàn)在Smalltalk語(yǔ)言中?,F(xiàn)在,很多計(jì)算機(jī)語(yǔ)言和架構(gòu)都采用了MVC模式。

4.1 MVC 模式概述

MVC模式是一種復(fù)合設(shè)計(jì)模式,由“觀察者”(Observer)模式、“策略”(Strategy)模式和“合成”(Composite)模式等組成。MVC模式由3個(gè)部分組成,如圖所示,其中這3個(gè)部分的作用如下圖所示。

MVC模式

MVC模式

模型。保存應(yīng)用數(shù)據(jù)的狀態(tài),回應(yīng)視圖對(duì)狀態(tài)的查詢,處理應(yīng)用業(yè)務(wù)邏輯,完成應(yīng)用的功能,將狀態(tài)的變化通知視圖。

視圖。為用戶展示信息并提供接口。用戶通過視圖向控制器發(fā)出動(dòng)作請(qǐng)求,然后再向模型發(fā)出查詢狀態(tài)的申請(qǐng),而模型狀態(tài)的變化會(huì)通知給視圖。

控制器。接收用戶請(qǐng)求,根據(jù)請(qǐng)求更新模型。另外,控制器還會(huì)更新所選擇的視圖并將其作為對(duì)用戶請(qǐng)求的回應(yīng)。控制器是視圖和模型的媒介,可以降低視圖與模型的耦合度,使視圖和模型的權(quán)責(zé)更加清晰,從而提高開發(fā)效率。

對(duì)應(yīng)于哲學(xué)中的“內(nèi)容”與“形式”,在MVC模型中,模型是“內(nèi)容”,它存儲(chǔ)了視圖所需要的數(shù)據(jù),視圖是“形式”,是外部表現(xiàn)方式,而控制器是它們的媒介。

4.2 Cocoa Touch 中的 MVC 模式

我們討論的是通用的MVC模式,而Cocoa和Cocoa Touch框架中的MVC模式與傳統(tǒng)的MVC模式略有不同,前者的模型與視圖不能進(jìn)行任何通信,所有的通信都是通過控制器完成的,如圖所示。

Cocoa Touch的MVC模式

Cocoa Touch的MVC模式

在Cocoa Touch框架的UIKit框架中, UIViewController 是所有控制器的根類,如 UITableViewController 、UITabBarController 和 UINavigationController 。 UIView 是視圖和控件的根類,模型一般繼承于 NSObject 的子類。

下面我們通過一個(gè)iOS的案例來(lái)分析Cocoa Touch中MVC模式的運(yùn)作過程,這個(gè)案例的界面如圖所示。

MVC案例界面

MVC案例界面

這里我們就不過多介紹案例的編寫過程,而是直接看一下代碼。打開MVCSample工程,其中包括 AppDelegate類、ViewController 類和Main.storyboard等文件。

AppDelegate 是應(yīng)用程序委托對(duì)象, ViewController 是視圖控制器,Main.storyboard是故事板文件。我們只看到了視圖控制器,沒有看到視圖和模型。打開故事板文件,可以看到View Controller Scene如圖所示。

View Controller Scene

View Controller Scene

打開View Controller,就可以看到View,其中直接使用了UIKit框架中的UIView,因此在MVCSample組中沒有視圖。此外,屬于視圖的還有Button和Text Field,它們是View的子視圖。

那么,模型對(duì)象在哪兒呢?模型對(duì)象很特殊,其本質(zhì)是視圖的“數(shù)據(jù)”。Text Field輸入的內(nèi)容,Button上的標(biāo)簽,都可以說(shuō)是模型,但是模型與視圖一樣,有的時(shí)候我們未必需要自己創(chuàng)建一個(gè)模型類。因此,我們做開發(fā)工作時(shí),主要是編寫視圖控制器。下面我們看看視圖控制器 ViewController 的代碼:

視圖控制器 ViewController 的代碼

由上述代碼可見,我們?yōu)閮蓚€(gè)控件myButton和myTextField定義了兩個(gè)輸出口類型的屬性。因?yàn)橐ㄟ^控制器更新這些視圖(控件也屬于視圖),所以我們需要把這些視圖定義成輸出口類型的屬性。

此外,還定義了 myAction: 方法以響應(yīng)myButton按鈕的觸摸事件。該方法的返回類型是動(dòng)作事件,這說(shuō)明該方法是可以響應(yīng)控件事件的。

另外,還實(shí)現(xiàn)了 UITextFieldDelegate 協(xié)議,這樣ViewController 就變成了UITextField控件的委托對(duì)象,它們之間的運(yùn)作關(guān)系如圖所示。

MVC案例運(yùn)作圖

MVC案例運(yùn)作圖

如圖所示,視圖包含了myButton和myTextField兩個(gè)控件。現(xiàn)在我們按照編號(hào)對(duì)圖解釋如下。

① 當(dāng)用戶觸摸myButton的時(shí)候,會(huì)觸發(fā) ViewController 中的 myAction: 方法。

② 視圖控制器會(huì)實(shí)現(xiàn)一些控件委托和數(shù)據(jù)源協(xié)議,這要看具體的控件。在此案例中, ViewController 實(shí)現(xiàn)了UITextFieldDelegate 協(xié)議,UITextFieldDelegate 中定義了一些響應(yīng) UITextField 事件的方法。

③ 視圖控制器通過屬性 myButton 和 myTextField 來(lái)改變控件的狀態(tài)。

④ 模型對(duì)象可以通過通知機(jī)制來(lái)通知數(shù)據(jù)的變化。

⑤ 視圖控制器可以保存一個(gè)模型成員變量或?qū)傩?,并通過它們改變模型的狀態(tài)。

本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途。希望此文對(duì)廣大技人員有所幫助。文章出自:南昌APP開發(fā)制作公司-百恒網(wǎng)絡(luò)

400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×