UIApplication對象及其代理UIApplicationDelegate

打交道,而是和其代理打交道。

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

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

如 果利用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()方法。

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

現在來看協議中定義的這些需要實現的方法分別是什麼作用:
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框變化完成後執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章