iOS程序的執(zhí)行順序
首先從main.m文件的main函數(shù)開始執(zhí)行的绢记。
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
//1灾票、principalClassName:應(yīng)用程序?qū)ο蟮念惷║IApplication或其子類)
//2党窜、delegateClassName:應(yīng)用程序delegate的類名辩棒。(任何接受了UIApplicationDelegate的類)```
UIApplicationMain根據(jù)上述兩個(gè)類名創(chuàng)建應(yīng)用程序?qū)嵗Α?yīng)用程序代理實(shí)例蹋半。然后建立事件循環(huán)(runloop)拯啦,檢測(cè)程序的各種事件(程序開始啟動(dòng)若债,接收到觸摸等等)
在執(zhí)行UIApplicationMain函數(shù)時(shí)做了跳轉(zhuǎn)符相,轉(zhuǎn)到了AppDelete中。應(yīng)用程序代理蠢琳,主要檢測(cè)應(yīng)用程序的狀態(tài)并做出相應(yīng)的處理啊终。應(yīng)用程序的狀態(tài)有很多,比如:程序啟動(dòng)傲须、進(jìn)入活躍狀態(tài)蓝牲、進(jìn)到后臺(tái)、內(nèi)存警告泰讽、收到遠(yuǎn)程消息等等例衍。任何接受了UIApplicationDelegate協(xié)議的對(duì)象都可以成為應(yīng)用程序代理昔期。一旦應(yīng)用程序的某種狀態(tài)觸發(fā),就會(huì)執(zhí)行相應(yīng)的代理方法佛玄。UIApplicationDelegate是一個(gè)OC的協(xié)議硼一。里面聲明了一堆方法,這些方法都與應(yīng)用程序運(yùn)行狀態(tài)有關(guān)梦抢,它們由應(yīng)用程序代理實(shí)現(xiàn)欠动。UIApplication對(duì)象負(fù)責(zé)調(diào)用。
application:didFinishLaunchingWithOptions:告訴delegate程序啟動(dòng)即將完成惑申,程序準(zhǔn)備要運(yùn)行具伍。(delegate實(shí)現(xiàn)這個(gè)方法時(shí),要?jiǎng)?chuàng)建window對(duì)象圈驼,將程序內(nèi)容通過window呈現(xiàn)給用戶人芽。),在該方法中為我們應(yīng)用程序創(chuàng)建window等必要的界面
```- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//初始化window
self.window.backgroundColor = [UIColor grayColor];//設(shè)置window的背景色
[self.window makeKeyAndVisible];//把window設(shè)置為主視圖
[self.window setRootViewController:[[UIViewController alloc] init]];//設(shè)置window的根視圖控制器
return YES;
}```
applicationWillResignActive:程序即將結(jié)束活躍狀態(tài),(例如:突然來電話绩脆,短信萤厅,下來菜單欄等)就會(huì)執(zhí)行該方法,一般在該方法中做一些必要信息的存儲(chǔ)靴迫,和一些暫停動(dòng)作惕味。例如,游戲正在進(jìn)行時(shí)玉锌,要暫停游戲
```- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"*****%s",__func__);//__func__打印方法名
}```
applicationDidEnterBackground:程序已經(jīng)進(jìn)入后臺(tái)名挥,如果程序長期在后臺(tái)呆著,有可能會(huì)退出主守,所以在該方法中要進(jìn)行一些重要數(shù)據(jù)的持久化禀倔。(按Home鍵)
```- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"*****%s",__func__);
}```
applicationWillEnterForeground:程序即將進(jìn)入前臺(tái),一般式在程序由后臺(tái)進(jìn)入該程序的時(shí)候執(zhí)行該方法
```- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"*****%s",__func__);
}```
applicationDidBecomeActive:告訴delegate應(yīng)用程序已經(jīng)進(jìn)入活躍狀態(tài)(重新執(zhí)行被暫停的任務(wù)),程序啟動(dòng)或者由后臺(tái)進(jìn)入前臺(tái)都會(huì)執(zhí)行該方法
```- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"*****%s",__func__);
}```
applicationWillTerminate:即將退出時(shí)執(zhí)行該方法
```- (void)applicationWillTerminate:(UIApplication *)application{
NSLog(@"*****%s",__func__);
}```