十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      ios設計模式之MVC模式

      百恒網絡 2017-04-07 5258

      關于iOS開發,我們之前重點分析了Cocoa框架下的單例模式、委托模式和觀察者模式,今天我們繼續和南昌APP開發制作公司小編來學習iOS常用設計模式中的MVC模式。MVC模式是相當古老的設計模式之一,它最早出現在Smalltalk語言中。現在,很多計算機語言和架構都采用了MVC模式。

      4.1 MVC 模式概述

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

      MVC模式

      MVC模式

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

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

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

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

      4.2 Cocoa Touch 中的 MVC 模式

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

      Cocoa Touch的MVC模式

      Cocoa Touch的MVC模式

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

      下面我們通過一個iOS的案例來分析Cocoa Touch中MVC模式的運作過程,這個案例的界面如圖所示。

      MVC案例界面

      MVC案例界面

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

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

      View Controller Scene

      View Controller Scene

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

      那么,模型對象在哪兒呢?模型對象很特殊,其本質是視圖的“數據”。Text Field輸入的內容,Button上的標簽,都可以說是模型,但是模型與視圖一樣,有的時候我們未必需要自己創建一個模型類。因此,我們做開發工作時,主要是編寫視圖控制器。下面我們看看視圖控制器 ViewController 的代碼:

      視圖控制器 ViewController 的代碼

      由上述代碼可見,我們為兩個控件myButton和myTextField定義了兩個輸出口類型的屬性。因為要通過控制器更新這些視圖(控件也屬于視圖),所以我們需要把這些視圖定義成輸出口類型的屬性。

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

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

      MVC案例運作圖

      MVC案例運作圖

      如圖所示,視圖包含了myButton和myTextField兩個控件。現在我們按照編號對圖解釋如下。

      ① 當用戶觸摸myButton的時候,會觸發 ViewController 中的 myAction: 方法。

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

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

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

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

      本文僅限內部技術人員學習交流,不得作于其他商業用途。希望此文對廣大技人員有所幫助。文章出自:南昌APP開發制作公司-百恒網絡

      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      国产精品高清m3u8在线播放| 精品国产伦一区二区三区在线观看| 日韩不卡在线播放| 精品久久久久一区二区三区| 国产成人高清精品免费鸭子| 精品日产卡一卡二卡三入口| 久久这里只精品99re66| 精品蜜臀久久久久99网站| 538精品在线观看| 午夜不卡久久精品无码免费| 久久国产精品免费网站| 久久精品中文字幕免费| 国产精品免费大片| 国产在线不卡午夜精品2021| 成人精品视频一区二区三区| 国产精品青草久久久久福利99| 伊人久久精品影院| sihu国产精品永久免费| 国产日韩精品一区二区在线观看播放| 亚洲av日韩综合一区在线观看| 日韩日韩日韩手机看片自拍| 国产aⅴ精品一区二区三区久久 | 国自产精品手机在线视频香蕉| 久久99国产精品99久久| 香蕉在线精品视频在线观看2| 国产精品免费看久久久香蕉| www国产亚洲精品久久久日本| 网友偷拍日韩精品| 亚洲国产精品第一区二区三区| 影院无码人妻精品一区二区| laowang在线精品视频| A级精品国产片在线观看| 亚洲综合精品网站在线观看| 国产精品亚洲产品一区二区三区 | 国产精品男男视频一区二区三区| 亚洲精品tv久久久久| 精品91自产拍在线观看| 久久亚洲AV永久无码精品| 最新国产乱人伦偷精品免费网站| 国产三级精品三级在线专区1| 老司机国内精品久久久久|