UIApplication

簡介:

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:程序即將退出

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容