iOS中MVC等設計模式詳解

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   os   使用   sp   strong   

iOS中MVC等設計模式詳解

  • 在iOS編程,利用設計模式可以大大提高你的開發效率,雖然在編寫代碼之初你需要花費較大時間把各種商務邏輯封裝起來。(事實證明這是值得的!)

    模型-視圖-控制器(MVC)設計模式是被大家廣為熟悉和使用的模式,實際上在移動開發中尤其ios開發中,這種模式被發揮到淋漓盡致

  • MVC設計模式包括三個部分:模型、視圖和控制器。
  • 模型包含資料、資訊,邏輯,或對象被認為是部分的業務層的iOS應用。
  • 視圖包含所有的使用者資訊的組件,如文本地區,按鈕,滑塊,被認為是展示層的一個iOS應用。
  • 控制器是聯絡,或通訊層,一個iOS應用。一個模型將永遠不會直接溝通一個視圖,反之亦然。 控制器串連模型視圖處理所有通訊。
  • 使用者行為發生在一個視圖,比如一個按鈕點擊。 視圖將訊息發送給控制器。 如果有必要,控制器與模型。 控制器通過資訊返回到視圖。 使用一個假想的計算機應用程式作為一個例子,MVC設計模式將應用如下:

    • 模型——計算功能(加、減、乘、除)。
    • 視圖——使用者介面組件(運算元和操作符按鈕、計算文本)。
    • 控制器——對象,傾聽和溝通訊息模型和視圖。 當平等的按鈕被選中時,例如,控制器使請求模型執行數學。 該模型返回答案到控制器,它及時溝通結果檢視。 視圖負責顯示答案。 
    • MVC是一個好的設計任何iOS應用程式或Mac應用程式的核心。採用這種模式的好處是多方面的。很多在這些應用程式中的對象往往是可重複使用的,往往得到更好的界定及其介面。MVC設計的應用程式,也更容易比其他應用程式進行擴充。此外,您的應用程式可以使用的許多技術和架構是基於MVC和要求您的自訂對象扮演一個MVC的角色。
    • 您可能沒有意識到這一點,但你已經建立了一個應用程式,是基於MVC:在你的iOS應用的HelloWorld。的模型對象是使用者名稱物業(NSString的對象)宣派及管理HelloWorldViewController類的。的HelloWorldViewControllerHelloWorldAppDelegate類的執行個體應用程式的控制器對象的應用程式的視圖對象的文字欄位,標籤,按鈕,背景圖。

      模型-視圖-控制器的完整資訊“模型-視圖-控制器”的概念在Objective-C編程。

       

       

      模型對象

      模型對象封裝了一個應用程式定義的資料操作和處理資料的邏輯和計算。例如,一個模型對象可能代表一個字元,在遊戲或在地址簿中的連絡人。有時,一個應用程式的模型層實際上是一個或多個圖形相關的對象。大部分的資料,部分應用程式的持久狀態(是否持久化狀態儲存在檔案或資料庫)應駐留在資料載入到應用程式的模型對象後。因為模型對象代表到一個特定的問題域相關的知識和專長,他們可以重複使用在類似的問題域。應該有一個“純粹”的模型對象的視圖對象,目前其資料,並允許使用者編輯資料,它不應該被關注的使用者介面和示範問題沒有明確的串連。

      在視圖層建立或修改資料的使用者操作在建立或更新模型對象通過一個控制器對象和結果傳達。當一個模型對象的變化(例如,新的接收資料通過網路連接),它會通知控制器對象,更新相應的視圖對象。

       

       

      查看對象

      一個視圖對象是在一個應用程式,使用者可以看到一個對象。一個視圖對象知道如何繪製自己可能會響應使用者的操作。視圖對象的一個??主要目的是顯示資料從應用程式的模型對象,可以使編輯該資料。儘管如此,在一個MVC應用程式的視圖物件模型對象通常脫鉤。

      因為你通常重用視圖對象,對其進行重新設定,視圖對象提供應用程式之間的一致性。對於iOS上,UIKit架構提供了視圖類的集合;為OS X AppKit的架構提供了一個類似的集合。UIKit的視圖對象的UIView類;最終繼承了AppKit,它最終繼承自NSView的類。

      視圖對象通過應用程式的控制器物件模型資料的變化,並瞭解使用者發起的變化,例如,文本的文字欄位中輸入通過控制器對象應用程式的模型對象溝通。

       

       

      控制器對象

      控制器對象作為一個或多個應用程式的視圖對象和一個或多個模型對象之間的中介。因此,控制器物件檢視對象的管道瞭解變化的模型對象,反之亦然。控制器對象也可以執行一個應用程式的安裝和協調的任務和其他對象的生命週期管理。

      控制器對象解釋使用者視圖對象中的行動和新的或更改的資料模型層。當模型對象的變化,控制器對象通訊,新的模型資料的視圖對象,使他們能夠顯示它。

       

       

      設計模式解決問題

      物件導向的系統,作為一個應用程式是動態。一個對象可以在運行時並不限定於在編譯時間設定的行為。一個對象可以發送郵件到其他對象,並可以有所不同運行情況下的目標相同的訊息。一個對象也可以與其他對象的一個??變數組在運行時,使用了多種技術,可以有效地完成工作的應用程式。對於一個對象,或對象的網路,做到這一點,它必須利用許多技術和架構體繫結構的設計模式是適應的。

      以下各節描述了許多這些技術和架構。考慮他們的Objective-C編程工具包的一部分。

       

       

      代表團:代理代表另一個對象

      代表團,一個對象調用代表的委託行為,並要求另一個對象。其他,委派,對象通常是一個架構對象。在一些點在執行時,它發送一個訊息到其委託的訊息告訴一些事件即將發生的委託,並要求一些回應。委託(通常是一個自訂類的一個執行個體)實現調用的方法的訊息,並返回一個適當的值。通常情況下,該值是一個布爾值,告訴委派物件是否繼續進行的動作。

    • 因此,代表團是一個架構的運作注入特定於應用程式的行為的一種手段,無需子類類類。它是一種常見的和強大的設計延伸和影響的行為架構。

      回想的HelloWorldAppDelegate對象的HelloWorld應用程式時建立工作通過你的第一個iOS應用。Xcode的自動分配,它是應用程式物件的委託,這是一個架構對象。應用程式委託可以處理應用:的didFinishLaunchingWithOptions:和其他代表團的訊息發送給它的應用程式物件。

      有兩個綱領性組件代表團。委託類必須定義一個屬性(按照慣例,名為委託)委託持有的參考。它也必須聲明一個協議,必須採取委託類(請參閱下面的部分協議)。很多類的Cocoa Touch和Cocoa架構提供的代表團作為一種方法,應用程式與特定應用程式的東西,是可以採取增加架構的行為。

      但是,代表團並不限於架構類。您可以實現在一個應用程式的兩個自訂對象之間的代表團。在可可觸摸應用程式使用一種常見的設計代表團允許子視圖控制器進行通訊其父視圖控制器的一些值(通常是使用者輸入的值)的一種手段。

       

       

      協議:啟用通訊對象之間的繼承關係

      協議是一聲明的程式介面的方法,任何類都可以實現。與協議相關聯的類的執行個體調用的方法的協議,並獲得傳回值類正式通過和實施該協議。這一個具體的目標,如解析XML的代碼或複製對象,對象之間的溝通,進一步加強。協議介面的任一側上的對象可以被遙遠地相互關聯的,通過繼承。因此協議是,代表團,子類化的替代,往往是一個架構的實施代表團的一部分。

    • 蘋果提供的架構申報幾十協議。此外,您的應用程式可以聲明你的類可以採用自訂協議。協議是你的編程工具包的一部分。與Objective-C語言編程,給出了一個全面的協議描述。

       

       

      通知中樞:通知有關觀察員事件

      Foundation架構的通知中樞是一個子系統,廣播訊息通知到一個應用程式中的所有對象註冊事件的觀察員。(以編程方式,這是一個NSNotificationCenter類的執行個體。)事件可以發生在任何一個應用程式的應用程式進入背景狀態,例如,或使用者開始鍵入的文字欄位中。一個通知,通知該事件已發生或即將發生的觀察員,從而使觀察者以適當的方式回應的機會。通知中樞的廣播通知是一種方法來增加一個應用程式物件之間的合作和凝聚力。

    • 例如,在iOS應用程式的視圖控制器可以觀察的通知UIKeyboardWillShowNotification調整其視圖的幾何形狀,以適應虛擬鍵盤。這個例子表明,通知是一個對象,它有一個名字,表明一個特定的事件,該事件是否已經發生或即將發生。它還帶有一個參考對象的職位(或發送)的通知,通知中樞,它可以包含一個字典的補充資料。

      任何對象都可以觀察到一個通知,但這樣做的,它必須註冊後才能收到它。在註冊時,必須指定一個選擇,確定要調用的方法的交付通知,方法的簽名必須有一個參數:通知對象。註冊時,觀察者也可以指定發布對象。

      通知中樞通知代表團訊息被發送到任意對象的特定事件發生時。但是,處理通知的方法,委派方法不同,不能返回一個值。通過通知中樞的通知是同步的,就像代表團。

      在您的應用程式的自訂對象可以定義和發布自己的通知,以及其他定製的對象在你的應用程式中,可以觀察到通知。

       

       

      目標行動:當事件發生時要發送的訊息封裝

      targer-action設計的概念很簡單。Object Storage Service的元素,使訊息表達,當某個事件發生時,把這些元素組合在一起,並發送一條訊息。的元素是輸送量的訊息(action),接收該訊息的對象(target)的一個選取器。目標的類方法實現了相應的行動和目標,當它接收到的訊息,在運行時,它響應此事件的執行方法。

      target-action主要是控制在Cocoa Touch和Cocoa架構的一個特點。控制項是一個使用介面物件,如按鈕,滑塊,或切換使用者操作(通過點擊,拖動,等等),以表示它們打算到一個應用程式。Cocoa Touch控制儲存的行動和目標都搭配一個或多個儲存格Object Storage Service目標和行動,大多數Cocoa Touch。

    • 一些架構使用target-action控制以外的對象。例如,UIKit架構使用目標的行動,在其設計的手勢識別。當一個手勢識別對象識別手勢,動作訊息發送到目標對象。
    • 鍵 – 值觀察:當一個值發生變化時通知觀察員

      鍵 – 值觀察允許一個對象在觀察的另一個對象的一個??屬性。觀察對象時,會通知該屬性的值的變化。瞭解新的值,以及舊的,如果觀測到的屬性是一個對多的關係(例如,一個數組),它也得知涉及其中所包含的對象中的變化。志願輔助應用程式變得更有凝聚力,保持物件模型,控制器,查看圖層的變化同步。

       

      類似NSNotificationCenter通知,多個志願觀察員可以觀察到一個單一的財產。此外,KVO是動態,因為它允許觀察的對象,而不需要任何新的API,如通知名稱的任意屬性。國際志願者組織是一個輕量級的點至點的通訊機制,不允許觀察的特定屬性的所有執行個體。

       

       

      基於設計模式的架構設計

      CocoaKIt和Cocoa架構還包括其他的設計基於設計模式,包括以下內容:

      • 查看階層。的意見被安排在一個應用程式提出基於視覺的層次組織遏制。這種模式允許應用對待個人的觀點和意見的成分均勻。在階層的根是一個視窗對象,每個視圖中,根目錄下有一個父視圖和零個或更多孩子的意見。家長的意見附上孩子的意見。視圖階層中的結構成分,兩者的繪圖和事件處理。
      • 響應鏈。響應鏈是一系列的對象大多意見,也有視窗,視圖控制器,本身以及其中的應用對象可以通過事件或動作訊息,直到一個鏈中的對象處理該事件。因此,它是一個合作的事件處理機制。響應鏈密切相關的視圖層次。
      • 查看控制器。雖然兩者的UIKit和AppKit的架構視圖控制器類,他們在iOS中是特別重要的。視圖控制器是一種特殊的控制器對象提出意見和管理一組。查看控制器對象提供的基礎設施管理內容相關的意見和協調它們的顯示和隱藏。視圖控制器管理子階層的應用程式視圖。
      • 類別為您提供一種方式來擴充一個類添加方法。與delegate一樣,它使您可以自訂行為沒有子類。分類是一個Objective-C的功能描述中寫Objective-C代碼。 

iOS中MVC等設計模式詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.