UIApplication的核心作用是提供了IOS程式的控制和協作工作。每一個程式在運行期必須有且僅有一個UIApplication(或其子類)的一個執行個體。
UIApplication的一個主要工作是處理使用者事件,它會起一個隊列,把所有使用者事件都放入隊列,逐個處理。在處理的時候,它會發送當前事件到一個合適的處理事件的目標控制項。此外,UIApplication還維護一個在本應用中開啟的window列表(UIWindow執行個體),這樣它就可以接觸應用中的任何一個UIView對象,UIApplication執行個體會被賦予一個代理對象,以處理應用程式的生命週期事件(比如程式啟動和關閉),系統事件(比如來點,記事項警告)等等。
建立一個任意類型的iOS應用工程,加入我們在Class Prefix輸入是TC,我們可以看到工程中產生一個類:
TCAppDelegate :UIResponder <UIApplicationDelegate>
這裡這個類的基類是UIResponder,和4.2以前產生的工程是不同的,以前是繼承自NSObject。不論如何,本類實現了一個名叫UIApplicationDelegate的介面,這個表明這個類就是這個工程中UIApplication執行個體的代理類。
在main函數中,
@autoreleasepool {
returnUIApplicationMain(argc, argv, nil,NSStringFromClass([TCAppDelegateclass]));
}
這裡傳入了代理類到UIApplicationMain函數中,UIApplicationMain函數在產生唯一個UIApplication的時候就可以把代理類的執行個體指標告訴這個單例對象了。
1.-(void)applicationWillResignActive:(UIApplication *)application
說明:當應用程式將要入非使用中執行,在此期間,應用程式不接收訊息或事件。比如來電話了。
2.-(void)applicationDidBecomeActive:(UIApplication *)application
說明:當應用程式入活動狀態執行,這個剛好跟上面那個相反。
3.-(void)applicationDidEnterBackground:(UIApplication *)application
說明:當程式被推送到背景時候調用。所以要設定後台繼續運行,則在這個函數裡面設定即可。
4.-(void)applicationWillEnterForeground:(UIApplication *)application
說明:當程式從後台將要重新回到前台時候調用,這個剛好跟上面的那個相反。
5.-(void)applicationWillTerminate:(UIApplication *)application
說明:當程式將要退出時被調用。通常是用來儲存資料和一些退出前清理工作。這個需要設定UIApplicationExitsOnSuspend的索引值。
6.-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
說明:iPhone裝置只有有限的記憶體,如果為應用程式分配了太多記憶體作業系統會終止應用程式運行,在終止前會執行這個方法,通常可以在這裡進行記憶體清理工作,防止程式被終止。
7.-(void)applicationSignificantTimeChange:(UIApplication *)application
說明:當系統時間發生改變時執行。
8.-(void)applicationDidFinishLaunching:(UIApplication *)application
說明:當程式載入後執行
9.-(void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
說明:當StatusBar框將要變化時執行
10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
說明:當StatusBar框方向將要變化時執行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
說明:當通過url執行
12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
說明:當StatusBar框方向變化完成後執行
13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
說明:當StatusBar框變化完成後執行
iPhone中的應用程式很容易受到打擾,比如一個來電可能導致應用程式失去焦點,如果這個時候接聽了電話,那麼應用程式會轉到後台運行。還有很多 其它類似的事件會導致iPhone應用程式失去焦點,在應用程式失去焦點前會調用委託類的applicationWillResignActive()方 法,而應用程式再次擷取到焦點的時候會調用applicationDidBecomeActive()方法。比如在運行應用程式的時候鎖屏會調用委託類的 applicationWillResignActive()方法,而當螢幕被解鎖的時候,又會調用
applicationDidBecomeActive()方法。
另外一個非常重要的方法就是applicationDidReceiveMemoryWarning(),因為iPhone裝置只有有限的記憶體,如 果為應用程式分配了太多記憶體作業系統會終止應用程式的運行,但在終止之前作業系統會通過先調用委託類的 applicationDidReceiveMemoryWarning()方法警告應用程式,在UIApplication接收到這個事件後它會傳遞給 委託類的applicationDidReceiveMemoryWarning()方法,委託類在這個方法內可以進行釋放記憶體的操作以防止作業系統強制
終止應用程式的運行。
下面是這個類的一些功能:
下面是這個類的一些功能:
1.設定icon上的數字表徵圖
//設定主介面icon上的數字表徵圖,在2.0中引進, 預設為0
[UIApplicationsharedApplication].applicationIconBadgeNumber = 4;
2.設定搖動手勢的時候,是否支援redo,undo操作
//搖動手勢,是否支援redo undo操作。
//3.0以後引進,預設YES
[UIApplicationsharedApplication].applicationSupportsShakeToEdit =YES;
3.判斷程式運行狀態
//判斷程式運行狀態,在2.0以後引入
/*
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
*/
if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程式在運行狀態");
}
4.阻止螢幕變暗進入休眠狀態
//阻止螢幕變暗,謹慎使用,預設為no 2.0
[UIApplicationsharedApplication].idleTimerDisabled =YES;
(謹慎使用本功能,因為非常耗電)
5.顯示連網狀態
//顯示連網標記 2.0
[UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;
6.在map上顯示一個地址
NSString* addressText =@"1 Infinite Loop, Cupertino, CA 95014";
// URL encode the spaces
addressText = [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString* urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlText]];
7.寄送電子郵件
NSString *recipients =@"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";
NSString *body =@"&body=It is raining in sunny California!";
NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];
email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];
8.打電話到一個號碼
// Call Google 411
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://8004664411"]];
9.傳送簡訊
// Text to Google SMS
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://466453"]];
10.開啟一個網址
// Lanuch any iPhone developers fav site
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];