你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Info.plist和pch文件的作用,UIApplication,iOS程序的啟動過程,AppDelegate 方法解釋,UIWindow,生命周期方法

Info.plist和pch文件的作用,UIApplication,iOS程序的啟動過程,AppDelegate 方法解釋,UIWindow,生命周期方法

編輯:IOS開發綜合

Info.plist常見的設置
建立一個工程後,會在Supporting files文件夾下看到一個“工程名-Info.plist”的文件,該文件對工程做一些運行期的配置,非常重要,不能刪除

注:在舊版本Xcode創建的工程中,這個配置文件的名字就叫“Info.plist”
項目中其他Plist文件不能帶有“Info”這個字眼,不然會被錯認為是傳說中非常重要的“Info.plist”
項目中還有一個InfoPlist.strings的文件,跟Info.plist文件的本地化相關

Info.plist常見屬性
Localiztion native development region(CFBundleDevelopmentRegion)-本地化相關
Bundle display name(CFBundleDisplayName)-程序安裝後顯示的名稱,限制在10-12個字符,如果超出,將被顯示縮寫名稱
Icon file(CFBundleIconFile)-app圖標名稱,一般為Icon.png
Bundle version(CFBundleVersion)-應用程序的版本號,每次往App Store上發布一個新版本時,需要增加這個版本號
Main storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名稱

Bundle identifier(CFBundleIdentifier)-項目的唯一標識,部署到真機時用到

Leo

pch文件

項目的Supporting files文件夾下面有個“工程名-Prefix.pch”文件,也是一個頭文件

pch頭文件的內容能被項目中的其他所有源文件共享和訪問

一般在pch文件中定義一些全局的宏<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPtTacGNozsS8/tbQzO2808/CwdDUpLSmwO3WuMHuo6zIu7rz1NrP7sS/1tDKudPDTG9nKCZoZWxsaXA7KcC0yuSz9sjV1r7Qxc+io6y+zb/J0tTU2reisrzTptPDtcTKsbryo6zSu7TO0NS9q05TTG9n0+++5NLGs/2jqNTatffK1MSjyr3PwqOsssXT0Lao0uVERUJVR6OpPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> #ifdef DEBUG #define Log(...) NSLog(__VA_ARGS__) #else #define Log(...) #endif

UIApplication
UIApplication對象是應用程序的象征
每一個應用都有自己的UIApplication對象,而且是單例的
通過[UIApplication sharedApplication]可以獲得這個單例對象

    UIApplication *appDelgate = [UIApplication sharedApplication];  
    UIApplication *appDelegate1 = [UIApplication sharedApplication];  
//    UIApplication *appDelegate2 = [[UIApplication alloc] init];  //會出錯。  
    NSLog(@"%p - %p", appDelgate, appDelegate1); // 打印顯示同一個地址  

一個iOS程序啟動後創建的第一個對象就是UIApplication對象
利用UIApplication對象,能進行一些應用級別的操作
如:

UIApplication *app = [UIApplication sharedApplication];  
 app.applicationIconBadgeNumber = 998; // 設置應用程序圖標上的數字  
 app.networkActivityIndicatorVisible = YES; // 設置狀態欄的聯網動畫  


 // 設置狀態欄的樣式  
 // app.statusBarStyle = UIStatusBarStyleLightContent;  // 與下面方法的區別在於,不可設置動畫。  
 [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];  

 // 設置狀態欄是否隱藏  
   app.statusBarHidden = YES;  // 與下面方法的區別在於,不可設置動畫。  

 [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];      

 NSURL *url = [NSURL URLWithString:@"http://ios.itcast.cn"];  
 [app openURL:url];  

注:iOS7中 如果想利用UIApplication來管理狀態欄,首先得修改Info.plist的設置

Leo

在iOS7中,默認情況下,狀態欄都是由UIViewController管理的,UIViewController實現下列方法就可以輕松管理狀態欄的可見性和樣式
狀態欄的樣式

- (UIStatusBarStyle)preferredStatusBarStyle;   

狀態欄的可見性

-(BOOL)prefersStatusBarHidden;  

openURL

- (BOOL)openURL:(NSURL*)url;  

openURL:方法的部分功能有
打電話 ,發短信,發郵件,打開一個網頁資源

// 打電話   
UIApplication *app = [UIApplication sharedApplication];   
[app openURL:[NSURL URLWithString:@"tel://10086"]];  
// 發短信   
[app openURL:[NSURL URLWithString:@"sms://10086"]];   
// 發郵件   
[app openURL:[NSURL URLWithString:@"mailto://[email protected]"]];  
// 打開一個網頁資源   
[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];  

iOS程序的啟動過程

Leo

UIApplication和delegate
delegate可處理的事件包括:
應用程序的生命周期事件(如程序啟動和關閉)
系統事件(如來電)
內存警告

main函數中執行了一個UIApplicationMain這個函數

int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);

argc 傳入了幾個參數
argv 傳入參數的值
principalClassName:指定應用程序類名(app的象征),該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認值
delegateClassName:指定應用程序的代理類,該類必須遵守UIApplicationDelegate協議

AppDelegate 方法解釋

// 當應用程序啟動完畢的時候就會調用(系統自動調用)  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{  
    return YES;  
}  
// 即將失去活動狀態的時候調用(失去焦點, 不可交互)  
- (void)applicationWillResignActive:(UIApplication *)application  
{  
}  

// 重新獲取焦點(能夠和用戶交互)  
- (void)applicationDidBecomeActive:(UIApplication *)application  
{  

}  

// 應用程序進入後台的時候調用  
// 一般在該方法中保存應用程序的數據, 以及狀態  
- (void)applicationDidEnterBackground:(UIApplication *)application  
{  

}  

// 應用程序即將進入前台的時候調用  
// 一般在該方法中恢復應用程序的數據,以及狀態  
- (void)applicationWillEnterForeground:(UIApplication *)application  
{  

}  

// 應用程序即將被銷毀的時候會調用該方法  
// 注意:如果應用程序處於掛起狀態的時候無法調用該方法  
- (void)applicationWillTerminate:(UIApplication *)application  
{  

}  

// 應用程序接收到內存警告的時候就會調用  
// 一般在該方法中釋放掉不需要的內存  
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application  
{  

}  

UIWindow
UIWindow是一種特殊的UIView,通常在一個app中只會有一個UIWindow
iOS程序啟動完畢後,創建的第一個視圖控件就是UIWindow,接著創建控制器的view,最後將控制器的view添加到UIWindow上,於是控制器的view就顯示在屏幕上了

一個iOS程序之所以能顯示到屏幕上,完全是因為它有UIWindow
也就說,沒有UIWindow,就看不見任何UI界面

創建UIWindow對象和設置window根視圖控制器的代碼如下:

// 程序啟動完畢之後就會調用一次,(AppDelegate中的方法)  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
{  
       //創建window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //創建視圖控制器
    RootViewController *rootVC = [[RootViewController alloc] init];
    //指定window的根視圖控制器
    self.window.rootViewController = rootVC;
    //讓window成為主窗口並且可視
    [self.window makeKeyAndVisible]; 

}  

UIWindow的獲得

// 獲取應用程序的主窗口  
    NSLog(@"%@", [UIApplication sharedApplication].keyWindow);  

// 獲得某個UIView所在的UIWindow   
view.window  

注:用來接收鍵盤以及非觸摸類的消息事件的UIWindow,而且程序中每個時刻只能有一個UIWindow是keyWindow。如果某個UIWindow內部的文本框不能輸入文字,可能是因為這個UIWindow不是keyWindow(特別是IOS7之前)

四大對象關系圖

Leo

生命周期方法
Leo

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved