UIApplication對象介紹: 1> 一個UIApplication表明是一個應用程序,並且是單例的。 ** 用來封裝整個應用程序的一個對象, 好比當應用程序執行到某個時期要作什麼, 生命週期等。 2> 獲取UIApplication對象: [UIApplication sharedApplication];(單例的) /** 驗證單例模式, 參考代碼: - (void)viewDidLoad { [super viewDidLoad]; UIApplication *app1 = [UIApplication sharedApplication]; UIApplication *app2 = [UIApplication sharedApplication]; NSLog(@"%p----%p",app1, app2); } */ 3> 當一個iOS程序啓動後,首先建立的第一個對象就是UIApplication對象。 4> 利用UIApplication能夠作一些應用級別的操做。 * 應用級別操做: 1> QQ有消息的時候右上角的消息條數。 // 獲取UIApplication對象。 UIApplication *app = [UIApplication sharedApplication]; // 設置右上角, 有10條消息 app.applicationIconBadgeNumber = 10; // 取消顯示消息 app.applicationIconBadgeNumber = 0; /** 參考代碼: // 當點擊按鈕時, 設置右上角消息 - (IBAction)click:(id)sender { // 獲取UIApplication對象 UIApplication *app = [UIApplication sharedApplication]; // iOS 8 系統要求設置通知的時候必須通過用戶許可。 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; [app registerUserNotificationSettings:settings]; app.applicationIconBadgeNumber = 10; // 有10條消息 // app.applicationIconBadgeNumber = app.applicationIconBadgeNumber > 0 ? 0 : 10; // 有10條消息 } */ 2> 聯網操做時,狀態欄上的等待圖標指示器。waiting圖標。 UIApplication *app = [UIApplication sharedApplication]; app.networkActivityIndicatorVisible = YES; 3> 利用UIApplication打開某個資源: ** 系統會自動根據協議識別使用某個app打開。 UIApplication *app = [UIApplication sharedApplication]; ** 打開一個網頁: [app openURL:[NSURL URLWithString:@"http://ios.icast.cn"]]; ** 打電話 [app openURL:[NSURL URLWithString:@"tel://10086"]]; ** 發短信 [app openURL:[NSURL URLWithString:@"sms://10086"]]; ** 發郵件 [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]]; ** 使用openURL方法也能夠打開其餘應用,在不一樣應用之間互相調用對方。 ** 美圖秀秀, 點擊分享到"新浪微博", 打開"新浪微博"選擇帳號, 跳轉回"美圖秀秀", 開始分享 4> 經過UIApplication管理狀態欄: ** 自從iOS7開始能夠經過兩種方式來控制狀態欄 1> 控制器 * 經過UIViewController管理(每個UIViewController均可以擁有本身不一樣的狀態欄) * 須要在控制器中實現以下方法: /** 參考代碼: // 是否隱藏"狀態欄" - (BOOL)prefersStatusBarHidden { return NO; } // 狀態欄的樣式 - (UIStatusBarStyle)preferredStatusBarStyle { // 白色 return UIStatusBarStyleLightContent; } */ 2> UIApplication * 經過UIApplication管理(一個應用程序的狀態欄都由它統一管理) ** iOS7開始狀態欄默認交給了控制器來管理,若是但願經過UIApplication來管理,步驟以下: 1> 在Info.plist文件中增長一個配置項 * View controller-based status bar appearance = NO, 2>而後編寫以下代碼: /** 參考代碼: - (IBAction)click:(id)sender { UIApplication *app = [UIApplication sharedApplication]; // 設置狀態欄是否隱藏 //app.statusBarHidden = YES; // 動畫的方式 //[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; // 設置狀態欄顯示爲白色 // app.statusBarStyle = UIStatusBarStyleLightContent; // 動畫的方式 //[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; } */ 5. UIApplicationDelegate介紹。 ** 新建完項目之後的那個AppDelegate文件, 就是UIApplication的代理對象。 * 而且該代理對象已經被設置好了, 無需咱們手動設置了。 * 在main函數中進行的設置 /** int main(int argc, char * argv[]) { @autoreleasepool { // 設置啓動UIApplication對象, 和對應的代理對象AppDelegate。 return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } */ ** App容易受到干擾。正在玩遊戲,一個電話打過來了。 * 應用程序的生命週期事件(如程序啓動和關閉) * 系統事件(如來電) * 內存警告 * … … ** 處理這些干擾事件,就要用到AppDelegate代理對象了。 ** 總結: AppDelegate的主要做用就是處理(監聽)應用程序自己的各類事件: * 應用程序啓動 * 應用程序進入後臺 * 應用程序進入前臺 * 內存警告 * 等等, 都是應用程序自身的一些事件 ** 要想成爲UIApplication的代理對象, 必須遵照:UIApplicationDelegate協議。 ** 代理中的若干方法介紹: 1. - (BOOL)application: didFinishLaunchingWithOptions: // app第一次啓動完畢後就會調用(當程序啓動後會顯示一張啓動圖片, 當這個圖片顯示完畢, 消失後, 就開始調用這個方法) 2. - (void)applicationDidEnterBackground:(UIApplication *)application // 當程序進入後臺時, 調用該方法。(好比:按了Home鍵, 或者一個電話打過來了, 當前程序都會進入後臺。) // 在這個方法中能夠作一些保存當前程序數據, 暫停程序的操做。 3. - (void)applicationWillEnterForeground:(UIApplication *)application // 當程序再次進入前臺的時候調用。 4. - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application // 當發生內存警告時觸發該事件。 6. UIApplicationMain函數介紹。 /** 方法名: int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName); 參數介紹: argc:使用main函數的argc便可 argv:使用main函數的argv便可 principalClassName:指定應用程序類名(app的象徵),該類必須是UIApplication(或子類),若是爲nil,則用UIApplication類做爲默認值 delegateClassName:指定應用程序的代理類,UIApplicationDelegate協議中定義的方法,在該類中實現 UIApplicationMain函數會: 1> 根據principalClassName建立UIApplication對象 2> 根據delegateClassName建立一個delegate對象,並將該delegate對象賦值給UIApplication對象中的delegate屬性 程序正常退出時UIApplicationMain函數才返回 默認調用方式: UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 等價於 UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate"); ** 代理參數必須傳遞, 若是傳nil, 則顯示"黑屏"。 */ 7. iOS程序啓動過程。參考PPT上的圖片。 1> 打開程序。 2> 調用main函數。 3> 在main函數中調用: UIApplicationMain()函數。 * 在UIApplicationMain()函數中: 1. 建立UIApplication對象 2. 建立AppDelegate代理對象 3. 將AppDelegate代理對象設置給UIApplication對象。 4. 程序啓動完畢: 觸發application:didFinishLaunchingWithOptions事件。 5. 在UIApplicationMain()函數開啓一個"死循環(事件循環)", 因此程序不會退出, 咱們能夠任意使用。在這個"死循環(事件循環)"中程序不斷監聽用戶的各類事件, 依次處理(依靠"事件隊列"實現)。 4> 程序退出。