自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解析iPhone MVC設(shè)計模式要點

移動開發(fā) iOS
MVC架構(gòu)是"模型-視圖-控制器",MVC應(yīng)用程序也是由這三個部分組成。Event(事件)導(dǎo)致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的數(shù)據(jù)或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取數(shù)據(jù)來刷新自己。

接觸iphone的編程,就要從安裝、架構(gòu)、模式等一些知識來填充自己的編程習(xí)慣,那么本文就是講述的這些。

一、概念

MVC架構(gòu)是一個復(fù)雜的架構(gòu),其實現(xiàn)也顯得非常復(fù)雜。但是,我們已經(jīng)總結(jié)出了很多可靠的設(shè)計模式,多種設(shè)計模式結(jié)合在一起,使MVC架構(gòu)的實現(xiàn)變得相對簡單易行。Views可以看作一棵樹,顯然可以用Composite Pattern來實現(xiàn)。Views和Models之間的關(guān)系可以用Observer Pattern體現(xiàn)。Controller控制Views的顯示,可以用Strategy Pattern實現(xiàn)。Model通常是一個調(diào)停者,可采用Mediator Pattern來實現(xiàn)?,F(xiàn)在讓我們來了解一下MVC三個部分在J2EE架構(gòu)中處于什么位置,這樣有助于我們理解MVC架構(gòu)的實現(xiàn)。MVC與J2EE架構(gòu)的對應(yīng)關(guān)系是:View處于Web Tier或者說是Client Tier,通常是JSP/Servlet,即頁面顯示部分。Controller也處于Web Tier,通常用Servlet來實現(xiàn),即頁面顯示的邏輯部分實現(xiàn)。Model處于Middle

二、通信

1、Model和View永遠(yuǎn)不能相互通信,只能通過Controller傳遞。

2、Controller可以直接與Model對話(讀寫調(diào)用Model),Model通過Notification和KVO機制與Controller間接通信。

3、Controller可以直接與View對話(通過outlet,直接操作View,outlet直接對應(yīng)到View中的控件),View通過action向Controller報告事件的發(fā)生(如用戶Touch我了)。

Controller是View的直接數(shù)據(jù)源(數(shù)據(jù)很可能是Controller從Model中取得并經(jīng)過加工了)。Controller是View的代理(delegate),以同步View與Controller,delegate是一組協(xié)議,表示程序?qū)⒁蛘咭呀?jīng)處于某種狀態(tài)時,來調(diào)整View,以對用戶有個交代。例如系統(tǒng)內(nèi)存不足了,你是不是相應(yīng)的降低view的質(zhì)量以節(jié)省內(nèi)存。

:突然冒出個delegate,讓人不好理解,其實他不對應(yīng)xcode為我們創(chuàng)建的XXAppDelegate文件,此文件不屬于MVC中的任何一部分,雖然與MVC有聯(lián)系。我發(fā)現(xiàn)蘋果文檔里說A是B的代理的時候,通常是指A中有B的引用,可以A直接操作B。

三、實作

建立一個BtnClick工程系統(tǒng),會為我們生成以下文件:

  1. BtnClickAppDelegate.h  
  2. BtnClickAppDelegate.m  

以上兩個文件定義了實現(xiàn)UIApplicationDelegate協(xié)議的類BtnClicAppDelegate,UIApplicationDelegate協(xié)議是系統(tǒng)預(yù)定義的協(xié)議,負(fù)責(zé)監(jiān)視應(yīng)用程序的高層行為,處理幾個關(guān)鍵系統(tǒng)消息,是應(yīng)用程序生命周期為我們預(yù)留的Hook,每個iphone應(yīng)用程序必不可少的。iphone應(yīng)用程序的生命周期:

 

  1. BtnClickViewController.h  
  2. BtnClickViewController.m 

實現(xiàn)了MVC中的Controller.可以定義一些IBOutlet元素和IBAction方法與View通信。

  1. @interface BtnClickViewController : UIViewController{  
  2.     IBOutlet UILabel* statusText;  
  3. }  
  4. @property (retain,nonatomic) UILabel *statusText;  
  5. (IBAction)buttonPressed:(id)sender;  
  6. @end 

View對應(yīng)那個文件呢? 答案是Resource下的MainWindow.xib和BtnClickViewController.xib。MainWindow.xib文件在在應(yīng)用程序加載時是會被自動加載的,這其實是在plist文件中配置的。然后MainWindow.xib會加載子視圖BtnClickViewController.xib。

為什么會命名為ViewController,而不是分開命名?可能是因為View和Controller關(guān)系太緊密了,view就是Controller的跟班。實際編程時一定要分清MVC各部分的職責(zé)。自始至終沒見到Model的面,其實M是可選的,特別是對于簡單的應(yīng)用。任何與界面無關(guān)的,我們添加的自定義類來定義我們應(yīng)用程序的對象,都屬于Model的范疇。

【編輯推薦】

淺嘗iPhone中的MVC框架設(shè)計模式

詳解ASP.NET MVC 3中View的變化

iPhone游戲開發(fā):使用到的工具和技術(shù)

ASP.NET MVC中很酷的jQuery驗證插件

詳解ASP.NET MVC 3新的Layout布局系統(tǒng)

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-04-22 09:26:57

MVC設(shè)計

2011-04-21 09:46:41

設(shè)計模式

2009-07-10 16:14:29

MVC設(shè)計模式Swing

2010-09-04 10:57:27

園區(qū)網(wǎng)絡(luò)

2012-05-09 10:09:18

JavaMEJava

2021-09-16 06:44:05

組合模式設(shè)計

2014-04-14 05:31:08

WindowsPhonWP8MVC

2011-07-18 16:51:51

Cocoa 單態(tài) 模式

2010-06-12 16:30:51

UML設(shè)計

2009-12-10 13:43:08

使用PHPExcel

2012-12-18 10:03:22

JavaScriptWebJS

2011-06-02 17:27:49

iphone 多線程

2010-06-17 15:54:24

UML總結(jié)

2024-05-30 12:27:42

Python代碼

2023-08-29 08:44:38

裝飾器組合模式

2011-07-29 15:09:48

iPhone Category

2012-07-06 15:23:28

Linux集群

2009-12-24 14:02:57

Linux集群技術(shù)

2009-06-11 17:24:46

J2EE的MVC體系結(jié)J2EE設(shè)計模式

2013-12-16 10:53:06

移動應(yīng)用全屏模式
點贊
收藏

51CTO技術(shù)棧公眾號