iPhone開發(fā)進階(2)iPhone應(yīng)用程序的啟動過程
iPhone應(yīng)用程序的啟動過程是本文要介紹的內(nèi)容,上一回我們看到了iPhone的入口函數(shù)main,這之后它有是怎樣啟動應(yīng)用程序,初始化的呢,這些都是通過 UIApplicationMain 來實現(xiàn)的,我們來看啟動過程。
其啟動的流程圖大致如下圖所示:
- int retVal = UIApplicationMain(argc, argv, nil, nil);
通過上面的語句,創(chuàng)建UIApplication實例。同時,查看應(yīng)用程序的 Info.plist 文件(該文件記錄了一些應(yīng)用程序的基礎(chǔ)信息,比如程序名稱,版本,圖標等)。該文件還包含應(yīng)用程序資源文件的名稱(nib文件,名稱用NSMainNibFile鍵指定)。如下所示:
- <key>NSMainNibFile</key>
- <string>MainWindow</string>
上面的意思是指,在應(yīng)用程序啟動的時候,需要從nib文件中加載名為 MainWindow 的資源。
其實,nib文件也是參照項目中Resources組中MainWindow.xib文件,我們雙擊該文件,啟動Interface Builder后可以看到下面的圖示:
Interface Builder 中有以下4個項目:
File’s Owner 對象,實際上就是 UIApplication 的實例。
First Responder 對象。每個程序都會有一個***響應(yīng)者,比如鼠標事件,鍵盤事件等,它就是對應(yīng)的那個對象。比如多文檔程序中,menu的響應(yīng)事件一般都是連接到FirstResponder中去的,因為主界面一般都在別的nib里面,此時的FirstResponder就是你的那個主nib的FileOwner。
Delegate 對象。
Window。應(yīng)用程序啟動的時候所顯示的窗口。
應(yīng)用程序啟動之后,像下面圖一樣,你可以定制自己的行為,如圖:
程序啟動之后,會發(fā)送消息給 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]
是顯示該窗口。
總結(jié)以上的內(nèi)容,iPhone應(yīng)用程序的引導過程如下所示:
- main.m → MainWindow.xib → XXXXXXDelegate.m → XXXXXXViewController.m → XXXXXXViewController.xib
或者看下面的圖來理解。
小結(jié):iPhone應(yīng)用程序的啟動過程的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!如果想繼續(xù)深入了解的話,請參考以下幾篇文章:
iPhone開發(fā)進階(1)iPhone應(yīng)用程序項目構(gòu)成案例實現(xiàn)