上一回我們看到了iPhone的入口函數main,這之後它有是怎樣啟動應用程式,初始化的呢,這些都是通過 UIApplicationMain 來實現的。
其啟動的流程圖大致如所示:
1 int retVal = UIApplicationMain(argc, argv, nil, nil);
通過上面的語句,建立UIApplication執行個體。同時,查看應用程式的 Info.plist 檔案(該檔案記錄了一些應用程式的基礎資訊,比如程式名稱,版本,表徵圖等)。該檔案還包含應用程式資源檔的名稱(nib檔案,名稱用NSMainNibFile鍵指定)。如下所示:
<key>NSMainNibFile</key>
<string>MainWindow</string>
上面的意思是指,在應用程式啟動的時候,需要從nib檔案中載入名為 MainWindow 的資源。
其實,nib檔案也是參照項目中Resources組中MainWindow.xib檔案,我們雙擊該檔案,啟動Interface Builder後可以看到下面的圖示:
Interface Builder 中有以下4個項目:
File’s Owner 對象,實際上就是 UIApplication 的執行個體。
First Responder 對象。每個程式都會有一個第一響應者,比如滑鼠事件,鍵盤事件等,它就是對應的那個對象。比如多文檔程式中,menu的響應事件一般都是串連到FirstResponder中去的,因為主介面一般都在別的nib裡面,此時的FirstResponder就是你的那個主nib的FileOwner。
Delegate 對象。
Window。應用程式啟動的時候所顯示的視窗。
應用程式啟動之後,像下面圖一樣,你可以定製自己的行為。
程式啟動之後,會發送訊息給 UIApplicationDelegate 的 applicationDidFinishLaunching 方法,在這裡我們完成自己的初始化過程。如下面的代碼。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
[window addSubview:viewController.view] 表示 XXXXXXViewController.xib 、[window makeKeyAndVisible] 是顯示該視窗。
總結以上的內容,iPhone應用程式的引導過程如下所示:
1 main.m → MainWindow.xib → XXXXXXDelegate.m → XXXXXXViewController.m → XXXXXXViewController.xib
或者看下面的圖來理解。
作者:易飛揚