iOS程序的啓動過程介紹

        大家在學習iPhone開發時候,都會寫HelloWorld程序。大家一般都是通過嚮導,生成項目,然後通過模擬器啓動應用程序。但是大家知道其背後的啓動過程嗎?也就是當點擊程序圖標啓動程序開始到退出程序整個使用運行過程中底下的代碼都發生了什麼?有理解了這個才能遊刃有餘的掌握iPhone程序的開發,否則在寫程序的時候有點渾渾僵僵不知所以然的感覺。

    在開始介紹HelloWorld程序之前,我們先了解下UIApplication:

UIApplication

    UIApplication的核心作用是提供了iOS程序運行期間的控制和協作工作。

    UIApplication的一個主要工作是處理用戶事件,它會起一個隊列,把所有用戶事件都放入隊列,逐個處理,在處理的時候,它會發送當前事件到一個合適的處理事件的目標控件。此外,UIApplication實例還維護一個在本應用中打開的window列表(UIWindow實例),這樣它就可以接觸應用中的任何一個UIView對象。UIApplication實例會被賦予一個代理對象UIApplicationDelegate,以處理應用程序的生命週期事件(比如程序啓動和關閉)、系統事件(比如來電、記事項警告)等等。

    每一個程序在運行期必須有且僅有一個UIApplication(或則其子類)的一個實例。你可以通過調用[UIApplication sharedApplication]來得到這個單例實例的指針。

 

HelloWorld程序

    打開項目文件,找到Other Sources文件夾下的main.m源文件,打開,你將會看到如下代碼:

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int retVal = UIApplicationMain(argc, argv, nil, nil);

[pool release];

return retVal;

}

    和所有的C程序一樣,這是個程序入口main函數(NSAutoreleasePool內存自動回收池,不在這篇文章討論的範圍)。接下來我們來看UIApplicationMain函數,查看iPhone開發文檔:

int UIApplicationMain (
   int argc,
   char *argv[],
  
NSString *principalClassName,
  
NSString *delegateClassName
);

前兩個參數我們不多說,學過C語言的都知道。
第三個參數,是UIApplication類名或者是其子類名,如果是nil,則就默認使用UIApplication類名。
第四個參數是協議UIApplicationDelegate的實例化對象名,如果是nil,則從main nib文件中加載委託對象。這個對象就是UIApplication對象監聽到系統變化的時候通知其執行的相應方法。
在我們生成的HelloWorld應用程序中,第三個和第四個參數都爲nil,那麼也就是UIApplication和HelloWorldAppDelegate咯。HelloWorldAppDelegate實現了UIApplicationDelegate協議,可以重寫其所有方法。
我們在打開HelloWorldAppDelegate文件,我們會看到這樣的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

我們知道,每個應用程序有個UIWindow,這window負責管理和協調應用程序的屏幕顯示。在這裏把HelloWorldViewController實例賦值給window的rootViewController,rootViewController的view將會作爲UIWindow的首視圖。
好的,我們就可以HelloWorldViewController的loadView添加我們所需要的控件了:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)loadView
{

    // add control
}

    至此,HelloWord程序啓動過程以及介紹完成,大家對程序的啓動過程有沒有新的認識?

   

    總結程序啓動的過程如下:

1. 程序入口main函數創建UIApplication實例和UIApplication代理實例。

2. 在UIApplication代理實例中重寫啓動方法,設置第一ViewController。

3. 在第一ViewController中添加控件,實現應用程序界面。

 

by sschu

轉自:http://www.cnblogs.com/ydhliphonedev/archive/2012/07/30/2615801.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章