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

      百恒網絡

      南昌百恒網絡

      ios設計模式之MVC模式

      百恒網絡 2017-04-07 5262

      關于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
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      久久久久亚洲精品成人网小说| 最新国产精品亚洲| 久久精品国产99久久香蕉| 日韩在线视频播放| 精品72久久久久久久中文字幕| 亚洲精品亚洲人成在线观看麻豆| 97人妻精品全国免费视频| 国产成人精品亚洲精品| 国产精品久久久久久久久kt| 国产精品欧美成人| 18国产精品白浆在线观看免费| 99视频精品全国在线观看| 久久99热狠狠色精品一区| 亚洲精品和日本精品| 国产 日韩 中文字幕 制服| 日韩AV在线不卡一区二区三区| 精品成在人线AV无码免费看| 免费91麻豆精品国产自产在线观看| 国产一区麻豆剧传媒果冻精品| 日韩在线a视频免费播放| 成人精品一区二区三区校园激情| 久久中文字幕精品| 国产成人精品久久免费动漫| 日韩精品人妻系列无码专区免费| 国精品无码一区二区三区在线| 精品日韩在线视频一区二区三区| 日韩精品一二三四区| 无码8090精品久久一区| 日韩国产成人资源精品视频| 日韩毛片一级好特黄| 国内大量揄拍人妻精品視頻| 久久精品麻豆日日躁夜夜躁 | 亚洲精品乱码久久久久久V| 3d动漫精品一区视频在线观看| 99久热只有精品视频免费观看17 | MM1313亚洲国产精品| 亚洲精品伦理熟女国产一区二区| 欧美日韩精品乱国产| 成人区精品一区二区不卡亚洲| 亚洲精品无码mⅴ在线观看| 亚洲国产精品日韩av不卡在线|