IOS的Application以及IOS目錄的介紹

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 ...
相關文章
相關標籤/搜索