在開始介紹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