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

3.2  應用剖析
這一節我們從應用的類圖如入手,瞭解應用中有哪些類,以及這個類中的方法、成員變量和屬性。nib文件有哪些。還會介紹MVC設計模式等。
3.2.1  核心類圖
在該應用中涉及到9個類,1個協議如圖3-8所示。




3-8 核心類圖
在類圖其中有3個是Cocoa Touch提供的基類,即:UIViewControllerUIViewNSObject,其它的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*
  
  背後視圖的導航欄
  
  mainViewController
  
  成員變量
  
  IBOutlet MainViewController*
  
  主視圖控制器
  
  flipsideViewController
  
  成員變量
  
  IBOutlet FlipsideViewController*
  
  背後視圖控制器
  
  viewDidLoad
  
  方法
  
  void
  
  視圖加載完成回調方法
  
  dealloc
  
  方法
  
  void
  
  對象釋放回調方法
  
  didReceiveMemoryWarning
  
  方法
  
  void
  
  內存報警時候回調方法
  
  shouldAutorotateToInterfaceOrientation
  
  方法
  
  BOOL
  
  視圖控制器支持某個方向旋轉時候返回YES
  
  toggleView
  
  方法
  
  IBAction
  
  點擊按鈕或Done按鈕時候調用
  
  loadFlipsideViewController
  
  方法
  
  void
  
  初始化背後視圖控制器
  

其中按鈕的IBOutlet(輸出口)變量是infoButton,在Cocoa編程中一個控件是否定義輸出口是要看這個控件是否需要通過程序代碼改變它的狀態,例如:如果我們需要在控制器中改變按鈕的背景或文字,我們就需要爲該按鈕控件定義輸出口。
3.2.3  MainViewController
MainViewController是主視圖控制器,MainViewController類中的成員變量和方法如表3-3所示:
3-3 MainViewController類表
                                                        
  類成員
  
  變量或方法類型
  
  類型或返回類型
  
  說明
  
  createPassword
  
  成員變量
  
  IBOutlet UIButton*
  
  定義有輸出口的[color=windowtext ]Generate  Password按鈕
  
  emailPassword
  
  成員變量
  
  IBOutlet UIButton*
  
  定義有輸出口的E-Mail  Password按鈕
  
  viewDidLoad
  
  方法
  
  void
  
  視圖加載完成回調方法
  
  dealloc
  
  方法
  
  void
  
  對象釋放回調方法
  
  didReceiveMemoryWarning
  
  方法
  
  void
  
  內存報警時候回調方法
  
  shouldAutorotateToInterfaceOrientation
  
  方法
  
  BOOL
  
  視圖控制器支持某個方向旋轉時候返回YES
  
定義有輸出口的Generate PasswordE-Mail Password按鈕定義輸出口是因爲需要在控制器的viewDidLoad方法初始化這兩個按鈕狀態。
3.2.4 FlipsideViewController

FlipsideViewController是背後視圖控制器,FlipsideViewController類中的成員變量和方法如表3-4所示:
3-4 FlipsideViewController類表
                                        
類成員
  
變量或方法類型
類型或返回類型
  
說明
  
viewDidLoad
  
方法
  
void
  
視圖加載完成回調方法
  
dealloc
  
方法
  
void
  
對象釋放回調方法
  
didReceiveMemoryWarning
  
方法
  
void
  
內存報警時候回調方法
  
shouldAutorotateToInterfaceOrientation
  
方法
  
BOOL
  
視圖控制器支持某個方向旋轉時候返回YES
  
3.2.5 MainView
MainView是主視圖,MainView類中的成員變量和方法如表3-5所示:
3-5 MainView類表
                                                                                                        
類成員
  
變量或方法類型
類型或返回類型
  
說明
  
passwordLength
  
成員變量
  
IBOutlet UITextField*
  
定義有輸出口的密碼長度文本框
  
includeLowerCase
  
成員變量
  
IBOutlet UISwitch*
  
定義有輸出口的包含小寫開關控件
  
includeNumbers
  
成員變量
  
IBOutlet UISwitch*
  
定義有輸出口的包含數字開關控件
  
includePunctuation
  
成員變量
  
IBOutlet UISwitch*
  
定義有輸出口的包含標點符號開關控件
  
includeUpperCase
  
成員變量
  
IBOutlet UISwitch*
  
定義有輸出口的包含大寫開關控件
  
showPhonetics
  
成員變量
  
IBOutlet UISwitch*
  
定義有輸出口的是否顯示發音開關控件
  
password
  
成員變量
  
IBOutlet UITextField*
  
定義有輸出口的密碼文本框
  
phoneticPassword
  
成員變量
  
IBOutlet UITextView*
  
定義有輸出口的顯示發音文本視圖
  
emailPasswordButton
  
成員變量
  
IBOutlet UIButton*
  
定義有輸出口的發送email按鈕
  
setPasssword
  
方法
  
IBAction
  
點擊Generate Password按鈕時候調用
  
resignResponder
  
方法
  
IBAction
  
放棄密碼文本框和密碼長度文本框的第一響應者
  
emailPassword
  
方法
  
IBAction
  
點擊E-Mail Password按鈕時候調用
  
emailAddress成員變量,但是從來沒有使用過!還有比較嚴重的問題是,在該類中沒有重寫dealloc方法,該方法是對象釋放回調方法,在該方法中用來釋放類中的成員變量,代碼如下:
- (void)dealloc {
[passwordrelease];
… …
[superdealloc];
}
dealloc非常重要,特別是有很多成員變量需要釋放內存時候,而在該類中沒有重寫這個方法,這也是我們應該摒棄和借鑑的。
3.2.6 FlipsideView
FlipsideView是背後視圖,FlipsideView類中的成員變量和方法如表3-6所示:
3-6 FlipsideView類表
                                        
類成員
  
變量或方法類型
類型或返回類型
  
說明
  
dealloc
  
方法
  
void
  
對象釋放回調方法
  
initWithFrame:
  
構造方法
  
id
  
視圖的構造方法
  
drawRect:
  
方法
  
void
  
繪製視圖方法,本應用實際沒有使用
  
openLink
  
方法
  
IBAction
  
點擊Download按鈕時候調用
  

3.2.7 Nib文件
本應用中的nib文件有3個:MainWindow.xibMainView.xibFlipsideView.xib,這3個文件解釋如下:
· MainWindow.xib,在主窗口nib文件,默認Cocoa應用都有這個文件,主程序在啓動的時候讀取這個文件,根據這個文件配置信息啓動相應的根控制器。
· MainView.xib,是主視圖的nib文件,它是MainViewControllerMainView的紐帶。
· FlipsideView.xib,是主視圖的nib文件,它是FlipsideViewControllerFlipsideView的紐帶。
& 文件的後綴名是xib爲什麼nib文件?以前該文件的後綴名是nib,官方一致延續了nib的叫法。因此,在本書中也採用nib的叫法。

3.2.8  CocoaCocoa TouchMVC設計模式
從上面的介紹看到應用中有很多的UIViewControllerUIView,還有很多nib文件,它們之間是什麼關係呢?這與MVC設計模式有關。
蘋果的CocoaCocoa Touch採用了MVC設計模式進行設計的,所謂設計模式就是解決某一特定問題的方案。MVC是解決具有UI的應用系統的成熟解決方案,MVC解釋如下:
· MModel(模型)是應用系統中與視圖對於部分的數據;
· VView(視圖)是應用系統中用戶看到並與之交互的界面;
· CController(控制器)是應用系統中起到控制器作用,接受用戶事件,顯示數據等等,與視圖進行交互等。
& Cocoa是蘋果開發Mac OS X應用系統的框架,它是基於Objective-C,它包括:FoundationAppKitCocoa框架在iOS上叫做Cocoa TouchCocoa Touch框架包含:FoundationUIKit

CocoaCocoa Touch應用中嚴格按照該模式實現如圖3-9所示。在CocoaCocoa Touch中除了視圖和視圖控制器外,還有nib文件,nib文件是通過Interface Builder工具維護,在新版的Xcode 4.xInterface BuilderXcode集成在一起了,本書採用的還是Xcode3.2版本,因此Interface BuilderXcode工具還是分開的。







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


3-10 nib文件
無論從圖3-9還是圖3-10我們都沒有發現Model(模型)的“痕跡”,在一般的簡單控件中模型類不是很突出,它可以是簡單數據類型,也可以是NSStringObjective-C中的類,也可以是我們自定義一些類,它們可以以成員變量的方式出現在視圖控制器中,也可以以成員變量的方式出現在視圖中。因此,模型可以很靈活的出現,而控制器和視圖是很明顯的,一般而言一個控制器可以控制多個視圖。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章