在iOS應用中,每個程序得main函數中都調用了UIApplicationMain函數。
1
2
3
4
5
6
|
int
main(
int
argc,
char
*argv[])
{
@autoreleasepool
{
return
UIApplicationMain
(argc, argv,
nil
,
NSStringFromClass
([AppDelegate
class
]));
}
}
|
先來看看UIApplicationMain函數的原型:
1
2
3
4
5
6
|
int
UIApplicationMain
(
int
argc,
char
*argv[],
NSString
*principalClassName,
NSString
*delegateClassName
);
|
前面的argc和argv是ISO C標准的main函數的參數,直接傳遞給UIApplicationMain進行相關處理。principalClassName是應用程序類的名字,該類必須繼承自UIApplication類。而delegateClassName是應用程序類的代理類。如果主要nib文件(在info.plist文件中指定,key是NSMainNibFile)存在,就會在nib文件對象里尋找Application對象和連接它的delegate。此函數會根據principalClassName創建UIApplication對象,然后根據delegateClassName創建一個delegate對象,並將UIApplication對象中的delegate屬性設置為delegate對象。接着會建立應用的main runloop,進行事件的處理(首先會調用– application:didFinishLaunchingWithOptions:)。程序正常退出時才返回(如今iOS支持后台運行,系統在必要時會強行殺死不用的進程,一般這個函數不等返回進程就終止了)。