1.UIApplication介紹ios
1 1.UIApplication對象是應用程序的象徵 2 2.每個應用都有本身的UIApplication對象,並且是單例的 3 3.經過[UIApplication sharedApplication] 能夠得到這個單例對象 4 4.一個ios程序啓動後建立的第一個對象就是UIApplication對象 5 5.利用UIApplication對象,能進行一些應用級別的操做
//設置應用程序圖標右上角的紅色提醒數字windows
1 @property(nonatiomic) NSInteger applicationIconBadgeNumber;
//設置聯網指示器的可見性app
1 @property (nonatomic,getter=isNetworkActivityIndicatorVisible)BOOL networkActivityIndicatorVisible;
IOS7中的狀態欄ide
1 從IOS7 開始,系統提供了2中管理狀態欄的方式 2 經過 UIViewController管理(每個UIViewController均可以擁有本身不一樣的狀態欄) 3 經過UIApplication管理(一個應用程序的狀態欄都由它統一管理) 4 5 在IOS7中,默認狀況下,狀態欄都是由UIViewControoller管理的, 6 UIViewController實現下列方法就能夠輕鬆管理狀態欄的可見性和樣式 7 8 狀態欄的樣式 9 -(UIStatusBarstryle)preferredStatusBarStryle; 10 11 狀態欄的可見性 12 -(BOOL)prefersStatusBarHidden;
若是想利用UIApplication來管理狀態欄,首先得修改Info.plist的設置函數
UIApplication的openURL方法atom
1 -(BOOL)openURL :(NSURL*) url; 2 3 openURL:方法的部分功能有 4 //打電話 5 UIApplication *app =[UIApplication shareApplication]; 6 [app openURL:[NSURL URLWithString:@"tel://10086"]]; 7 8 //發短信 9 [app openURL:[NSURL URLWithString:@"sms://10086"]]; 10 11 //發郵件 12 [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]]; 13 14 //打開一個網頁資源 15 [app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];
UIApplication 和delegateurl
1 1.全部的移動操做系統都有個致命的缺點:app很容易受到打擾.好比一個來電,會致使app進入後臺甚至被終止 2 3 2.還有不少其餘相似的狀況會致使app受到干擾,在app受到干擾時,會產生一些系統事件,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統事件 4 5 delegate可處理的事件包括: 6 應用程序的生命週期事件(如程序啓動和關閉) 7 系統時間(如來電) 8 內存警告
注:每次新建完項目,都有個帶有"AppDelegate"字眼的類,它就是UIApplication的代理spa
NJAppDelegate默認已經遵照了UIApplicationDelegate協議,已是UIApplication的代理操作系統
2.application啓動的路徑3d
1 Supporting Files --->main.m 2 int main(int argc, char * argv[]) 3 { 4 @autoreleasepool { 5 /* 6 argc: 系統或者用戶傳入的參數個數 7 argv: 系統或者用戶傳入的實際參數 8 9 */ 10 // return UIApplicationMain(argc, argv, nil, NSStringFromClass([NJAppDelegate class])); 11 12 // return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([NJAppDelegate class])); 13 14 /* 15 1.根據傳入的第三個參數建立UIApplication對象 16 2.根據傳入的第四個產生建立UIApplication對象的代理 17 3.設置剛剛建立出來的代理對象爲UIApplication的代理 18 4.開啓一個事件循環 19 */ 20 return UIApplicationMain(argc, argv, @"UIApplication", @"NJAppDelegate"); 21 } 22 }
3.application生命週期
1 // 當應用程序啓動完畢的時候就會調用(系統自動調用) 2 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 3 { 4 // Override point for customization after application launch. 5 NSLog(@"didFinishLaunchingWithOptions"); 6 return YES; 7 } 8 // 即將失去活動狀態的時候調用(失去焦點, 不可交互) 9 - (void)applicationWillResignActive:(UIApplication *)application 10 { 11 NSLog(@"ResignActive"); 12 } 13 14 // 從新獲取焦點(可以和用戶交互) 15 - (void)applicationDidBecomeActive:(UIApplication *)application 16 { 17 18 NSLog(@"BecomeActive"); 19 } 20 21 // 應用程序進入後臺的時候調用 22 // 通常在該方法中保存應用程序的數據, 以及狀態 23 - (void)applicationDidEnterBackground:(UIApplication *)application 24 { 25 26 NSLog(@"Background"); 27 } 28 29 // 應用程序即將進入前臺的時候調用 30 // 通常在該方法中恢復應用程序的數據,以及狀態 31 - (void)applicationWillEnterForeground:(UIApplication *)application 32 { 33 34 NSLog(@"Foreground"); 35 } 36 37 // 應用程序即將被銷燬的時候會調用該方法 38 // 注意:若是應用程序處於掛起狀態的時候沒法調用該方法 39 - (void)applicationWillTerminate:(UIApplication *)application 40 { 41 42 } 43 44 // 應用程序接收到內存警告的時候就會調用 45 // 通常在該方法中釋放掉不須要的內存 46 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 47 { 48 NSLog(@"MemoryWarning"); 49 } 50 @end
Supporting Files--->UIApplication-Prefix.pch文件
//表示全部的.m文件都自動引用 #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #endif
程序啓動的完整過程
1 1.main函數 2 3 2.UIApplicationMain 4 * 建立UIApplication對象 5 * 建立UIApplication的delegate對象 6 7 3.delegate對象開始處理(監聽)系統事件(沒有storyboard) 8 * 程序啓動完畢的時候, 就會調用代理的application:didFinishLaunchingWithOptions:方法 9 * 在application:didFinishLaunchingWithOptions:中建立UIWindow 10 * 建立和設置UIWindow的rootViewController 11 * 顯示窗口 12 13 3.根據Info.plist得到最主要storyboard的文件名,加載最主要的storyboard(有storyboard) 14 * 建立UIWindow 15 * 建立和設置UIWindow的rootViewController 16 * 顯示窗口
UIWindow
1 UIWindow是一種特殊的UIView,一般在一個app中只會有一個UIWindow 2 3 IOS程序啓動完畢後,建立的第一個視圖控件就是UIWindow,接着建立控制器的view,最後將控制器的view添加到UIWindow上,因而控制器的view就顯示在屏幕上了 4 5 一個IOS程序之因此能顯示到屏幕上,徹底是由於它有UIWindow也就說,沒有UIWindow,就看不見任何UI界面 6 7 8 添加UIView到UIWindow中兩種常見方式: 9 1)//直接將view添加到UIWindow中,但並不會理會view對應的UIViewController 10 -(void)addSubview:(UIView *)view; 11 12 2)//自動將rootViewControoler的view添加到UIWindow中,負責管理rootViewController的生命週期 13 @property(nonatomic,retain) UIViewController *rootViewController; 14 15 16 經常使用方法: 17 //讓當前UIWindow變成keyWindow(主窗口) 18 -(void)makeKeyWindow: 19 20 //讓當前UIWindow變成keyWindow,並顯示出來 21 -(void)makeKeyAndVisible; 22 23 //打開UIWindow列表,這樣就能夠接觸應用中的任何一個UIView對象(平時輸入文字彈出的鍵盤,就處在一個新的UIWindow中) 24 [UIApplication sharedApplication].windows 25 26 //用來接收鍵盤以及非觸摸類的消息事件的UIWindow,並且程序中每一個時刻只能有一個UIWindow是keyWindow.若是某個UIWindow內部的文本框不能輸入文字,多是由於這個UIWindow不是keyWindow 27 [UIApplication sharedApplication].keyWindow 28 29 //得到某個UIView所在的UIWindow 30 view.window
四大對象關係圖
Info.plist
1 1.創建一個項目後,會在Supporting files文件夾下看到一個 "工程名-Info.plist"的文件,該文件對工程作一些運行期的配置,很是重要,不能刪除 2 2.在舊版本Xcode建立的工程中,這個配置文件的名字就叫"Info.plist" 3 3.項目中其餘的 plist 文件不能帶有 "info" 這個字眼,否則會被錯認爲是傳說中很是重要的 "info.plist" 4 4.項目中還有一個 InfoPlist.strings的文件,跟Info.plist文件的本地化相關 5 6 7 info.plist常見的一些屬性 8 9 //本地化相關 10 1)Localiztion native development region(CFBundleDevelopmentReginon) 11 12 //程序安裝後顯示的名稱,限制在10-12個字符,若是超出,將被顯示縮寫名稱 13 Bundle display name(CFBundleDisplayName) 14 15 //app圖標名稱,通常爲Icon.png 16 Icon file(CFBundleIconFile) 17 18 //應用程序的版本號,每次往App Store上發佈一個新版本時,須要增長這個版本號 19 Bundle version(CFBundleVersion) 20 21 //主stroryboard文件的名稱 22 Main storyboard file base name(NSMainStoryboardFile) 23 24 //項目的惟一標識,部署到真機時用到 25 Bundle identifier(CFBundleIdentifier)
pch文件
1 1.項目的Supporting files文件夾下面有個 "工程名-Prefix.pch"文件,也是一個頭文件 2 2.pch頭文件的內容能被項目中的其餘全部源文件共享和訪問 3 3.通常在pch文件中定義一些全局的宏 4 4.在pch文件中添加下列預處理指令,而後在項目中使用Log(...)來輸出日誌信息,就能夠在發佈應用的時候,一次性將NSLog語句移除(在調試模式下,纔有定義DEBUG) 5 #ifed DEBUF 6 #define Log(...) NSLog(_VA_ARGS__) 7 #else 8 #define Log(...) 9 #endif 10 ...