十年專注于品牌網(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 5362

      關(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ǔ)言中。現(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)的變化通知視圖。

      視圖。為用戶展示信息并提供接口。用戶通過(guò)視圖向控制器發(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)行任何通信,所有的通信都是通過(guò)控制器完成的,如圖所示。

      Cocoa Touch的MVC模式

      Cocoa Touch的MVC模式

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

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

      MVC案例界面

      MVC案例界面

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

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

      View Controller Scene

      View Controller Scene

      打開View Controller,就可以看到View,其中直接使用了UIKit框架中的UIView,因此在MVCSample組中沒(méi)有視圖。此外,屬于視圖的還有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)橐ㄟ^(guò)控制器更新這些視圖(控件也屬于視圖),所以我們需要把這些視圖定義成輸出口類型的屬性。

      此外,還定義了 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 事件的方法。

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

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

      ⑤ 視圖控制器可以保存一個(gè)模型成員變量或?qū)傩裕⑼ㄟ^(guò)它們改變模型的狀態(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ù)
       
      備案專線 備案專線
       
      ×
      国产精品亚洲а∨天堂2021| 无码国产精品一区二区免费 | 精品视频一区二区观看| 牛牛本精品99久久精品| 亚洲AV无码之国产精品| 2021国产成人午夜精品| 亚洲精品国产成人专区| 久久99国产精品久久99果冻传媒| 久久亚洲国产成人精品无码区| www国产亚洲精品久久久| 亚洲欧美日韩中文字幕在线一区| 国产精品午夜高清在线观看| 国产精品久久久久久久| 国产精品福利电影| 国产精品久久免费| 91精品国产高清久久久久久国产嫩草 | 四虎8848精品永久在线观看| 香蕉久久国产精品免| 久久精品无码一区二区三区不卡 | 亚洲精品久久久久无码AV片软件| 精品一区二区三区在线播放视频| 久久精品国产亚洲AV麻豆网站| 无码人妻丰满熟妇精品区| 久久精品中文字幕| 久久精品午夜福利| 久久精品青青大伊人av| 久久99国产精品久久久| 国99精品无码一区二区三区| 亚洲av无码国产精品色午夜字幕| 国产国产精品人在线视| 亚洲av午夜福利精品一区| 久久精品人人爽人人爽快| 国产真实乱子伦精品视频| 国产福利精品一区二区| 久久精品国产亚洲夜色AV网站 | 国产精品麻花传媒二三区别| 人妻少妇精品专区性色AV| 成人精品视频一区二区三区尤物 | 亚洲av日韩aⅴ无码色老头| 亚洲日韩国产欧美一区二区三区 | 无码人妻精品一区二区三区蜜桃 |