本文分三部分介紹:
第一部分:UIApplication對象介紹以及使用方法
第二部分:UIApplication 生命周期中常用的 delegate 方法介紹
第三部分:iOS程序啟動流程介紹
第一部分:UIApplication對象介紹以及使用方法
所有的移動操作系統都有個致命的缺點:app很容易受到打擾。比如一個來電或者鎖屏會導致app進入后臺甚至被終止,還有很多其它類似的情況會導致app受到干擾,在app受到干擾時,會產生一些系統事件,,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統事件。
一個iOS程序啟動后創建的第一個對象就是UIApplication對象,UIApplication對象是應用程序的象征。
每一個應用都有自己的UIApplication對象,這個對象是系統自動幫我們創建的,它是一個單例對象。我們只能通過 [UIApplication sharedApplication] 獲得這個單例對象,不能夠手動去創建它。
UIApplication常用方法
1、設置應用角標數字
1、iOS8之后,在設置之前,要注冊一個通知,才能夠接收到提醒。
UIUserNotificationSettings *notification =
[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
2、注冊通知對象
[[UIApplication sharedApplication] registerUserNotificationSettings:notification];
3、設置角標數字
[UIApplication sharedApplication].applicationIconBadgeNumber = 12;
2、設置聯網狀態
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
3、設置狀態欄顏色
1、首先在Info.plist中設置View controller-based status bar appearance 為 NO。
2、在需要改變狀態欄顏色的ViewController中在ViewDidLoad方法中增加:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
如果需要在全部View中都變色,可以寫在父類的相關方法中。
4、跳轉到Safari瀏覽器
NSURL *url = [NSURL URLWithString:@"http://www.lxweimin.com/u/db5d90611afa"];
[[UIApplication sharedApplication] openURL:url];
5、撥打電話
NSString *url = @"tel://10086";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
6、發短信
NSString *url = @"sms://10086";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
7、跳轉到應用頁面
+ (void)gotoAPPStore:(NSString*)appid
{
NSString*str = [NSStringstringWithFormat:@"http://itunes.apple.com/us/app/id%@",appid];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:str]];
}
8、跳轉到評價頁面
+ (void)gotoCommentAPP:(NSString*)appid
{
NSString*str = [NSStringstringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id;=%@",
appid ];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:str]];
}
第二部分:UIApplication 生命周期中常用的 delegate 方法介紹
UIApplication會在程序啟動時候創建一個遵守UIApplicationDelegate的代理,這個就是我們程序默認創建的AppDelegate類。AppDelegate就是遵守了UIApplicationDelegate協議。 在這個類中定義很多監聽系統事件的方法,同時也定義了一些應用程序的生命周期方法。
1、告訴代理進程啟動但還沒進入狀態保存
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2、在應用程序加載完畢之后調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
3、程序失去焦點的時候調用(不能跟用戶進行交互了)當應用程序將要入非活動狀態執行,在此期間,應用程序不接收消息或事件,比如來電話了
- (void)applicationWillResignActive:(UIApplication *)application
4、當應用程序獲取焦點的時候調用-獲取焦點之后才可以跟用戶進行交互當應用程序入活動狀態執行,這個剛好跟上面那個方法相反
- (void)applicationDidBecomeActive:(UIApplication *)application
5、當程序被推送到后臺的時候調用。所以要設置后臺繼續運行,則在這個函數里面設置即可 (點擊HOME鍵)
- (void)applicationDidEnterBackground:(UIApplication *)application
6、當程序從后臺將要重新回到前臺時候調用,這個剛好跟上面的那個方法相反。
- (void)applicationWillEnterForeground:(UIApplication *)application
7、當程序將要退出是被調用,通常是用來保存數據和一些退出前的清理工作。這個需要要設置UIApplicationExitsOnSuspend的鍵值。
- (void)applicationWillTerminate:(UIApplication *)application
初次啟動:依次調用的方法
didFinishLaunchingWithOptions
applicationDidBecomeActive
按下home鍵:依次調用的方法
applicationWillResignActive
applicationDidEnterBackground
再次點擊程序圖標進入:依次調用的方法
applicationWillEnterForeground
applicationDidBecomeActive
雙擊home鍵切換程序:依次調用的方法
applicationWillResignActive
applicationDidEnterBackground
在前臺雙擊home鍵殺死程序:依次調用的方法
applicationWillResignActive
applicationDidEnterBackground
applicationWillTerminate
下拉通知欄(或者上滑控制中心):調用的方法
applicationWillResignActive
上滑通知欄(或者下滑控制中心):調用的方法
applicationDidBecomeActive
第三部分:iOS 應用程序啟動流程介紹
1、執行Main函數
2、執行UIApplicationMain函數
3、創建UIApplication對象,并設置UIApplicationMain對象的代理。
4、開啟一個主運行循環,保證應用程序不退出。
5、加載info.plist配置文件,判斷一下info.plist文件當中的Main storyboard file base name里面有沒有指定storyboard文件,如果有就去加載info.plist文件,如果沒有,那么應用程序加載完畢。
6、通知應用程序,調用代理方法。