天天看點

《iPhone與iPad開發實戰—iOS經典應用剖析》連載二

3.2 

應用剖析

這一節我們從應用的類圖如入手,了解應用中有哪些類,以及這個類中的方法、成員變量和屬性。nib檔案有哪些。還會介紹mvc設計模式等。

3.2.1  核心類圖

在該應用中涉及到9個類,1個協定如圖3-8所示。

《iPhone與iPad開發實戰—iOS經典應用剖析》連載二

圖3-8

核心類圖

在類圖其中有3個是cocoa touch提供的基類,即:uiviewcontroller、uiview和nsobject,其它的6個類由我們編寫。還有1個協定uiapplicationdelegate。

這些類和協定的作用如表3-1所示:

表3-1類和協定表

  類名或協定

  作用

  備注

  uiviewcontroller

  視圖控制器基類

  基類

  uiview

  視圖基類

  nsobject

  objective-c根類

  rootviewcontroller

  應用中的根控制器

  應用程式類

  mainviewcontroller

  主視圖的視圖控制器

  flipsideviewcontroller

  背後視圖的視圖控制器

  mainview

  主視圖的視圖

  flipsideview

  背後視圖的視圖

  uiapplicationdelegate

  應用程式委托協定

  協定

  passwordgenappdelegate

  應用程式委托

3.2.2  rootviewcontroller類

rootviewcontroller是根控制器,它控制其它的視圖控制器。rootviewcontroller類中的成員變量和方法如表3-2所示:

表3-2 rootviewcontroller類表

  類成員

  變量或方法類型

  類型或傳回類型

  說明

  infobutton

  成員變量

  iboutlet uibutton*

  定義有輸出口的按鈕

  flipsidenavigationbar

  iboutlet uinavigationbar*

  背後視圖的導航欄

  iboutlet mainviewcontroller*

  主視圖控制器

  iboutlet flipsideviewcontroller*

  背後視圖控制器

  viewdidload

  方法

  void

  視圖加載完成回調方法

  dealloc

  對象釋放回調方法

  didreceivememorywarning

  記憶體報警時候回調方法

  shouldautorotatetointerfaceorientation

  bool

  視圖控制器支援某個方向旋轉時候傳回yes

  toggleview

  ibaction

  點選按鈕或done按鈕時候調用

  loadflipsideviewcontroller

  初始化背後視圖控制器

其中按鈕的iboutlet(輸出口)變量是infobutton,在cocoa程式設計中一個控件是否定義輸出口是要看這個控件是否需要通過程式代碼改變它的狀态,例如:如果我們需要在控制器中改變按鈕的背景或文字,我們就需要為該按鈕控件定義輸出口。

3.2.3  mainviewcontroller類

mainviewcontroller是主視圖控制器,mainviewcontroller類中的成員變量和方法如表3-3所示:

表3-3 mainviewcontroller類表

  createpassword

  定義有輸出口的[color=windowtext ]generate  password按鈕

  emailpassword

  定義有輸出口的e-mail  password按鈕

定義有輸出口的generate password和e-mail password按鈕定義輸出口是因為需要在控制器的viewdidload方法初始化這兩個按鈕狀态。

3.2.4 flipsideviewcontroller類

flipsideviewcontroller是背後視圖控制器,flipsideviewcontroller類中的成員變量和方法如表3-4所示:

表3-4 flipsideviewcontroller類表

類成員

變量或方法類型

類型或傳回類型

說明

viewdidload

方法

void

視圖加載完成回調方法

dealloc

對象釋放回調方法

didreceivememorywarning

記憶體報警時候回調方法

shouldautorotatetointerfaceorientation

bool

視圖控制器支援某個方向旋轉時候傳回yes

3.2.5 mainview類

mainview是主視圖,mainview類中的成員變量和方法如表3-5所示:

表3-5 mainview類表

passwordlength

成員變量

iboutlet uitextfield*

定義有輸出口的密碼長度文本框

includelowercase

iboutlet uiswitch*

定義有輸出口的包含小寫開關控件

includenumbers

定義有輸出口的包含數字開關控件

includepunctuation

定義有輸出口的包含标點符号開關控件

includeuppercase

定義有輸出口的包含大寫開關控件

showphonetics

定義有輸出口的是否顯示發音開關控件

password

定義有輸出口的密碼文本框

phoneticpassword

iboutlet uitextview*

定義有輸出口的顯示發音文本視圖

emailpasswordbutton

iboutlet uibutton*

定義有輸出口的發送email按鈕

setpasssword

ibaction

點選generate password按鈕時候調用

resignresponder

放棄密碼文本框和密碼長度文本框的第一響應者

emailpassword

點選e-mail password按鈕時候調用

emailaddress成員變量,但是從來沒有使用過!還有比較嚴重的問題是,在該類中沒有重寫dealloc方法,該方法是對象釋放回調方法,在該方法中用來釋放類中的成員變量,代碼如下:

- (void)dealloc {

[passwordrelease];

… …

[superdealloc];

}

dealloc非常重要,特别是有很多成員變量需要釋放記憶體時候,而在該類中沒有重寫這個方法,這也是我們應該摒棄和借鑒的。

3.2.6 flipsideview類

flipsideview是背後視圖,flipsideview類中的成員變量和方法如表3-6所示:

表3-6 flipsideview類表

initwithframe:

構造方法

id

視圖的構造方法

drawrect:

繪制視圖方法,本應用實際沒有使用

openlink

點選download按鈕時候調用

3.2.7 nib檔案

本應用中的nib檔案有3個:mainwindow.xib、mainview.xib和flipsideview.xib,這3個檔案解釋如下:

·

mainwindow.xib,在主視窗nib檔案,預設cocoa應用都有這個檔案,主程式在啟動的時候讀取這個檔案,根據這個檔案配置資訊啟動相應的根控制器。

mainview.xib,是主視圖的nib檔案,它是mainviewcontroller和mainview的紐帶。

flipsideview.xib,是主視圖的nib檔案,它是flipsideviewcontroller和flipsideview的紐帶。

&

檔案的字尾名是xib為什麼nib檔案?以前該檔案的字尾名是nib,官方一緻延續了nib的叫法。是以,在本書中也采用nib的叫法。

3.2.8  cocoa和cocoa touch中mvc設計模式

從上面的介紹看到應用中有很多的uiviewcontroller和uiview,還有很多nib檔案,它們之間是什麼關系呢?這與mvc設計模式有關。

蘋果的cocoa和cocoa touch采用了mvc設計模式進行設計的,所謂設計模式就是解決某一特定問題的方案。mvc是解決具有ui的應用系統的成熟解決方案,mvc解釋如下:

m-model(模型)是應用系統中與視圖對于部分的資料;

v-view(視圖)是應用系統中使用者看到并與之互動的界面;

c-controller(控制器)是應用系統中起到控制器作用,接受使用者事件,顯示資料等等,與視圖進行互動等。

cocoa是蘋果開發mac os x應用系統的架構,它是基于objective-c,它包括:foundation和appkit,cocoa架構在ios上叫做cocoa

touch,cocoa touch架構包含:foundation和uikit。

在cocoa和cocoa touch應用中嚴格按照該模式實作如圖3-9所示。在cocoa和cocoa

touch中除了視圖和視圖控制器外,還有nib檔案,nib檔案是通過interface builder工具維護,在新版的xcode 4.x後interface

builder與xcode內建在一起了,本書采用的還是xcode3.2版本,是以interface builder與xcode工具還是分開的。

《iPhone與iPad開發實戰—iOS經典應用剖析》連載二

圖3-9 cocoa mvc

nib檔案是視圖和控制器的“紐帶”,如圖3-10所示,通過這個“紐帶”控制器能夠控制在視圖上顯示和讀取内容,能夠接受和響應視圖上的事件。我們也可以通過nib檔案可視化地設計視圖。

《iPhone與iPad開發實戰—iOS經典應用剖析》連載二

圖3-10 nib檔案

無論從圖3-9還是圖3-10我們都沒有發現model(模型)的“痕迹”,在一般的簡單控件中模型類不是很突出,它可以是簡單資料類型,也可以是nsstring等objective-c中的類,也可以是我們自定義一些類,它們可以以成員變量的方式出現在視圖控制器中,也可以以成員變量的方式出現在視圖中。是以,模型可以很靈活的出現,而控制器和視圖是很明顯的,一般而言一個控制器可以控制多個視圖。

繼續閱讀