簡介:
1,UIApplication對象是應用程序的象征,一個UIApplication對象就代表一個應用程序。
2,每一個應用都有自己的UIApplication對象,而且是單例的,如果用alloc方法新建一個,會報錯
3,獲得UIApplication 的方法:[UIApplication sharedApplication]
4,一個ios程序啟動后創(chuàng)建的第一個對象就是UIApplication對象,而且只有一個
5,利用Application對象,能進行一些應用級別的操作
1,顯示圖標上的提醒數(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,判斷程序運行狀態(tài)
/*
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
*/
if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程序在運行狀態(tài)");
}
4,顯示聯(lián)網(wǎng)標記
[UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;
5,阻止屏幕變暗進入休眠狀態(tài):(慎用,耗電)
[UIApplicationsharedApplication].idleTimerDisabled =YES;
一、程序主函數(shù)
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
程序啟動后,先進入main函數(shù),之后,執(zhí)行UIApplicationMain這個函數(shù),其中各個參數(shù)的意思如下:
1,argc:系統(tǒng)或者用戶傳入的參數(shù)個數(shù)
2,argue:系統(tǒng)或者用戶傳入的實際參數(shù)
3,指定應用程序類名:(app的象征),該類必須是UIApplication或其子類,如果是nil,則默認是UIApplication類
4:指定應用程序的代理類,該類必須遵守UIApplicationDelegate協(xié)議
UIApplicationMain函數(shù)會根據(jù)第三個參數(shù)(類名)創(chuàng)建UIApplication對象,根據(jù)第四個參數(shù)(代理類名(必須遵守協(xié)議))創(chuàng)建一個delegate對象,并將該對象賦值給UIApplication對象中的delegate屬性;接著會建立應用程序的Main Runloop(事件循環(huán))【可以理解為里面是一個思循環(huán),這個事件循環(huán)是一個隊列(先進先出),先添加進去的先處理】,進行事件處理,(首先在程序加載完畢后,調(diào)用delegate對象的application:didFinishLaunchingWithOptions:方法),程序正常退出時,UIApplicationMain函數(shù)才返回
二、程序啟動的完整過程
1,main函數(shù)
2,UIApplicationMain:
*:創(chuàng)建UIApplication對象。
*:創(chuàng)建UIApplication的delegate對象
3,delegate對象開始處理(監(jiān)聽)系統(tǒng)事件,(沒有storyBoard情況)
*程序啟動完畢的時候,就會調(diào)用代理的application:didFinishLaunchingWithOptions:方法,
*在application:didFinishLaunchingWithOptions:中創(chuàng)建UIWindow
*創(chuàng)建和設置UIWindow的rootController
*顯示窗口
3,根據(jù)Info.plist獲得最主要的storyBoard文件名,加載最主要的storyBoard(有storyBoard)
*創(chuàng)建UIWindow;
*創(chuàng)建和設置UIWindow是rootViewController
*顯示窗口
三、程序啟動原理圖如下:
1,application:didFinishedLaunchingWithOptions:程序加載完畢
2,applicationDidBecomeActive:程序獲取焦點
3,applicationDidEnterBackground:程序進入后臺
在該方法中保存應用程序的數(shù)據(jù),以及狀態(tài);要設置程序后臺繼續(xù)運行,在這個方法里
4,applicationWillResignActive:程序失去焦點
程序將要進入非活動狀態(tài)執(zhí)行,在此期間,應用程序不接受消息或事件,例如來電話
5;applicationWillEnterForeFround:程序從后臺回到前臺
在該方法中恢復應用程序的數(shù)據(jù),以及狀態(tài)
6:applicationDidReceiveMemoryWaring:內(nèi)存警告,可能要終止程序
一般在該方法內(nèi)釋放掉不需要的內(nèi)存
7:applicationWillTerminate:程序即將退出