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