簡介:
1,UIApplication對象是應(yīng)用程序的象征,一個(gè)UIApplication對象就代表一個(gè)應(yīng)用程序。
2,每一個(gè)應(yīng)用都有自己的UIApplication對象欲诺,而且是單例的肄扎,如果用alloc方法新建一個(gè)深啤,會報(bào)錯(cuò)
3茬祷,獲得UIApplication 的方法:[UIApplication sharedApplication]
4,一個(gè)ios程序啟動后創(chuàng)建的第一個(gè)對象就是UIApplication對象谤狡,而且只有一個(gè)
5,利用Application對象厂抖,能進(jìn)行一些應(yīng)用級別的操作
1茎毁,顯示圖標(biāo)上的提醒數(shù)字
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
UIApplication *app=[UIApplication sharedApplication];
app.applicationIconBadgeNumber=1;
2,openUrl方法
UIApplication *app = [UIApplication sharedApplication];
打電話:[app openUrl:[NSUrl urlWithString:@“tel://100000”]];
發(fā)短信:[app openUrl:[NSUrl urlWithString:@“sms://111111”]];
發(fā)郵件:[app openUrl:[NSUrl urlWithString:@“mailto://111111@qq.com”]];
打開網(wǎng)頁資源:[app openUrl:[NSUrl urlWithString:@“http://www.baidu.com”]];
打開地圖:
NSString *addressText = @"beijing";
addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
NSLog(@"urlText =============== %@", urlText);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
3忱辅,判斷程序運(yùn)行狀態(tài)
/*
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
*/
if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程序在運(yùn)行狀態(tài)");
}
4七蜘,顯示聯(lián)網(wǎng)標(biāo)記
[UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;
5,阻止屏幕變暗進(jìn)入休眠狀態(tài):(慎用墙懂,耗電)
[UIApplicationsharedApplication].idleTimerDisabled =YES;
一橡卤、程序主函數(shù)
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
程序啟動后损搬,先進(jìn)入main函數(shù)碧库,之后巧勤,執(zhí)行UIApplicationMain這個(gè)函數(shù)嵌灰,其中各個(gè)參數(shù)的意思如下:
1,argc:系統(tǒng)或者用戶傳入的參數(shù)個(gè)數(shù)
2颅悉,argue:系統(tǒng)或者用戶傳入的實(shí)際參數(shù)
3沽瞭,指定應(yīng)用程序類名:(app的象征),該類必須是UIApplication或其子類剩瓶,如果是nil,則默認(rèn)是UIApplication類
4:指定應(yīng)用程序的代理類,該類必須遵守UIApplicationDelegate協(xié)議
UIApplicationMain函數(shù)會根據(jù)第三個(gè)參數(shù)(類名)創(chuàng)建UIApplication對象延曙,根據(jù)第四個(gè)參數(shù)(代理類名(必須遵守協(xié)議))創(chuàng)建一個(gè)delegate對象,并將該對象賦值給UIApplication對象中的delegate屬性搂鲫;接著會建立應(yīng)用程序的Main Runloop(事件循環(huán))【可以理解為里面是一個(gè)思循環(huán)傍药,這個(gè)事件循環(huán)是一個(gè)隊(duì)列(先進(jìn)先出),先添加進(jìn)去的先處理】魂仍,進(jìn)行事件處理拐辽,(首先在程序加載完畢后擦酌,調(diào)用delegate對象的application:didFinishLaunchingWithOptions:方法)俱诸,程序正常退出時(shí)赊舶,UIApplicationMain函數(shù)才返回
二赶诊、程序啟動的完整過程
1园骆,main函數(shù)
2舔痪,UIApplicationMain:
*:創(chuàng)建UIApplication對象锌唾。
*:創(chuàng)建UIApplication的delegate對象
3,delegate對象開始處理(監(jiān)聽)系統(tǒng)事件晌涕,(沒有storyBoard情況)
*程序啟動完畢的時(shí)候,就會調(diào)用代理的application:didFinishLaunchingWithOptions:方法余黎,
*在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow
*創(chuàng)建和設(shè)置UIWindow的rootController
*顯示窗口
3,根據(jù)Info.plist獲得最主要的storyBoard文件名惧财,加載最主要的storyBoard(有storyBoard)
*創(chuàng)建UIWindow;
*創(chuàng)建和設(shè)置UIWindow是rootViewController
*顯示窗口
三、程序啟動原理圖如下:
1霎迫,application:didFinishedLaunchingWithOptions:程序加載完畢
2,applicationDidBecomeActive:程序獲取焦點(diǎn)
3知给,applicationDidEnterBackground:程序進(jìn)入后臺
在該方法中保存應(yīng)用程序的數(shù)據(jù)描姚,以及狀態(tài)涩赢;要設(shè)置程序后臺繼續(xù)運(yùn)行轩勘,在這個(gè)方法里
4,applicationWillResignActive:程序失去焦點(diǎn)
程序?qū)⒁M(jìn)入非活動狀態(tài)執(zhí)行,在此期間绊寻,應(yīng)用程序不接受消息或事件,例如來電話
5澄步;applicationWillEnterForeFround:程序從后臺回到前臺
在該方法中恢復(fù)應(yīng)用程序的數(shù)據(jù),以及狀態(tài)
6:applicationDidReceiveMemoryWaring:內(nèi)存警告村缸,可能要終止程序
一般在該方法內(nèi)釋放掉不需要的內(nèi)存
7:applicationWillTerminate:程序即將退出