UIApplication對象及其代理UIApplicationDelegate[轉]

在開發過程當中咱們須要一些全局對象來將程序的各個部分鏈接起來,這些全局對象中最重要的就是UIApplication對象。但在實際編程中咱們並不直接和UIApplication對象打交道,而是和其代理 打交道。程序員

UIApplication 是iPhone應用程序的開始而且負責初始化並顯示UIWindow,並負責加載應用程序的第一個UIView到UIWindow窗體中。 UIApplication的另外一個任務是幫助管理應用程序的生命週期,而UIApplication經過一個名字爲 UIApplicationDelegate的代理類來履行這個任務。儘管UIApplication會負責接收事件,而 UIApplicationDelegate則決定應用程序如何去響應這些事件,UIApplicationDelegate能夠處理的事件包括應用程序 的生命週期事件(好比程序啓動和關閉)、系統事件(好比來電、記事項警告),本文會介紹如何加載應用程序的UIView到UIWindow以及如何利用 UIApplicationDelegate處理系統事件。編程

通 常對於UIApplication讀者是不必修改它的,只須要知道UIApplication接收系統事件便可,而如何編寫代碼來處理這些系統事件則是 程序員的工做。處理系統事件須要編寫一個繼承自UIApplicationDelegate接口的類,而UIApplicationDelegate接口 提供生命週期函數來處理應用程序以及應用程序的系統事件。app

如 果利用Xcode的模板建立項目,Xcode會爲程序員建立繼承自UIApplicationDelegate的類,但不會自動實現繼承自 UIApplicationDelegate的可選的事件處理函數。若是讀者建立一個名爲「TestUIApplication」的項目,Xcode會自 動建立TestUIApplicationAppDelegate.h和TestUIApplicationAppDelegate.m文件,文件的聲明 以下:
@interface TestUIApplicationAppDelegate : NSObject <UIApplicationDelegate>
而應用程序的UIApplication則被定義在MainWindow.xib文件中,而且有一個做爲outlet的UIApplicationDelegate引用。
函數

iPhone 並非多任務的操做系統,因此應用程序很容易受到打擾,好比一個來電可能致使應用程序失去焦點,若是這個時候接聽了電話,那麼應用程序會自動終止運行。還 有不少其它相似的事件會致使iPhone應用程序失去焦點,在應用程序失去焦點前會調用委託類的 applicationWillResignActive()方法,而應用程序再次獲取到焦點的時候會調用 applicationDidBecomeActive()方法。好比在運行應用程序的時候鎖屏會調用委託類的 applicationWillResignActive()方法,而當屏幕被解鎖的時候,又會調用 applicationDidBecomeActive()方法。url

另 外一個很是重要的方法就是applicationDidReceiveMemoryWarning(),由於iPhone設備只有有限的內存,若是爲應用 程序分配了太多內存操做系統會終止應用程序的運行,但在終止以前操做系統會經過先調用委託類的 applicationDidReceiveMemoryWarning()方法警告應用程序,在UIApplication接收到這個事件後它會傳遞給 委託類的applicationDidReceiveMemoryWarning()方法,委託類在這個方法內能夠進行釋放內存的操做以防止操做系統強制 終止應用程序的運行。spa

如今來看協議中定義的這些須要實現的方法分別是什麼做用:
一、- (void)applicationWillResignActive:(UIApplication *)application
說明:當應用程序將要入非活動狀態執行,在此期間,應用程序不接收消息或事件,好比來電話了
二、- (void)applicationDidBecomeActive:(UIApplication *)application
說明:當應用程序入活動狀態執行,這個恰好跟上面那個方法相反
三、- (void)applicationDidEnterBackground:(UIApplication *)application
說明:當程序被推送到後臺的時候調用。因此要設置後臺繼續運行,則在這個函數裏面設置便可
四、- (void)applicationWillEnterForeground:(UIApplication *)application
說明:當程序從後臺將要從新回到前臺時候調用,這個恰好跟上面的那個方法相反。
五、- (void)applicationWillTerminate:(UIApplication *)application
說明:當程序將要退出是被調用,一般是用來保存數據和一些退出前的清理工做。這個須要要設置UIApplicationExitsOnSuspend的鍵值。
六、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
說明:iPhone設備只有有限的內存,若是爲應用程序分配了太多內存操做系統會終止應用程序的運行,在終止前會執行這個方法,一般能夠在這裏進行內存清理工做防止程序被終止
七、- (void)applicationSignificantTimeChange:(UIApplication*)application
說明:當系統時間發生改變時執行
八、- (void)applicationDidFinishLaunching:(UIApplication*)application
說明:當程序載入後執行
九、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
說明:當StatusBar框將要變化時執行
十、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration
說明:當StatusBar框方向將要變化時執行
十一、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
說明:當經過url執行
十二、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
說明:當StatusBar框方向變化完成後執行
1三、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
說明:當StatusBar框變化完成後執行操作系統

相關文章
相關標籤/搜索