程序啓動過程
1.打開程序後先執行 SupportingFiels當中的main函數 在mian()函數中執行了一個UIApplicationMain()這個函數
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
1).UIApplicationMain當中的四個參數
UIApplicationMain(argh,argue,nil,NSStringFromClass([AppDelegate class]);
1)argh:使用main函數argc即可
2)argv:使用main函數argv即可
3)principalClassName:指定應用程序類名 (app 的象徵), 該類必須是UIApplication(或子類),如果爲nil,則用UIApplication類作爲默認值
4)delegateClassName:指定應用程序的代理類,UIApplicationDelegate協議中定義方法,在該類中是實現
3.UIApplicationMain 中執行操作
int main(int argc, char *argv[]) { @autoreleasepool {
return UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
// 1.創建application對象
// 2.創建application的代理對象
// 3.把application和application的代理 進行綁定
// 4.開始事件循環 } }
4.UIApplicationMain函數會:
(1)根據principalClassName創建UIApplication對象
(2)根據delegateClassName創建一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性
5.應用程序啓動後,會建立應用程序的Main Runloop(事件循環),監聽事件並調用註冊的方法
(1)首先會在程序完畢後調用delegate對象的application:didFinishLaunchingWithOptions:方法
6.程序正常退出時UIApplicationMain函數纔會返回
UIApplicationDelegate的簡單介紹
// 程序第一次加載完成的時候調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
// 將要失去焦點 - 不能用戶交互
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"applicationWillResignActive");
}
// 已經獲取焦點 - 可以用戶交互
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"applicationDidBecomeActive");
}
// 已經進入後臺
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"applicationDidEnterBackground");
// 保存數據
}
// 將要進入前臺
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"applicationWillEnterForeground");
// 恢復數據
}
// 程序掛了!!!
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"applicationWillTerminate");
// 1.自動掛
// 2.手動掛
}