IOS的Application以及IOS目錄的介紹
1.UIApplication介紹
1 1.UIApplication對象是應用程序的象征 2 2.每一個應用都有自己的UIApplication對象,而且是單例的 3 3.通過[UIApplication sharedApplication] 可以獲得這個單例對象 4 4.一個ios程序啟動后創建的第一個對象就是UIApplication對象 5 5.利用UIApplication對象,能進行一些應用級別的操作
//設置應用程序圖標右上角的紅色提醒數字
1 @property(nonatiomic) NSInteger applicationIconBadgeNumber;

//設置聯網指示器的可見性
1 @property (nonatomic,getter=isNetworkActivityIndicatorVisible)BOOL networkActivityIndicatorVisible;

IOS7中的狀態欄
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方法
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 和delegate
1 1.所有的移動操作系統都有個致命的缺點:app很容易受到打擾.比如一個來電,會導致app進入后臺甚至被終止 2 3 2.還有很多其他類似的情況會導致app受到干擾,在app受到干擾時,會產生一些系統事件,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統事件 4 5 delegate可處理的事件包括: 6 應用程序的生命周期事件(如程序啟動和關閉) 7 系統時間(如來電) 8 內存警告

注:每次新建完項目,都有個帶有"AppDelegate"字眼的類,它就是UIApplication的代理
NJAppDelegate默認已經遵守了UIApplicationDelegate協議,已經是UIApplication的代理
2.application啟動的路徑
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 ...

浙公網安備 33010602011771號