大家在學習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