標籤:
IOS 中的 AppDelegate.m/h 檔案是很重要的呢,因為它是對 Application 的整個生命週期進行管理的。
先明白,每個iPhone應用程式都有一個UIApplication,UIApplication是iPhone應用程式的開始並且負責初始化並顯 示 UIWindow,並負責載入應用程式的第一個UIView到UIWindow表單中。UIApplication的另一個任務是協助管理應用程式的 生命 周期,而UIApplication通過一個名字為UIApplicationDelegate的代理類來履行這個任務。儘管 UIApplication 會負責接收事件,而UIApplicationDelegate則決定應用程式如何去響應這些事 件,UIApplicationDelegate可以處理 的事件包括應用程式的生命週期事件(比如程式啟動和關閉)、系統事件(比如來電、記事項警 告),本文會介紹如何載入應用程式的UIView到 UIWindow以及如何利用UIApplicationDelegate處理系統事件。
通 常對於UIApplication讀者是沒必要修改它的,只需要知道UIApplication接收系統事件即可,而如何編寫代碼來處理這些系統事件 則 是程式員的工作。處理系統事件需要編寫一個繼承自UIApplicationDelegate介面的類,而 UIApplicationDelegate接 口提供生命週期函數來處理應用程式以及應用程式的系統事件,這些生命週期函數如下表所示:
1、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"當程式載入後執行");
}
說明:當程式載入後執行,應用程式啟動入口。只在應用程式啟動時執行一次。也就是說在應用程式啟動後,要執行的委託調用。application參數用來擷取應用程式的狀態、變數等,值得注意的是字典參數:(NSDictionary *)launchOptions,該參數儲存程式啟動的原因。
若使用者直接啟動,lauchOptions內無資料;
若由其他應用程式通過openURL:啟動,則UIApplicationLaunchOptionsURLKey對應的對象為啟動 URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程式的 bundle ID (NSString);
若由本地通知啟動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是為啟動應用程式的的本地通知對象(UILocalNotification);
若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啟動應用程式的的遠程通知資訊userInfo(NSDictionary);
其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。
如果要在啟動時,做出一些區分,那就需要在下面的代碼做處理。比如:應用可以被某個其它應用調起(作為該應用的子應用),要實現單點登入,那就需要在啟動代碼的地方做出合理的驗證,並跳過登入。
例子:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
if(url)
{
}
NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
if(bundleId)
{
}
UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if(localNotify)
{
}
NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(userInfo)
{
}
}
2、- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"應用程式將要進入非使用中,即將進入後台");
}
在應用程式將要由活動狀態切換到非使用中時候,要執行的委託調用,如 按下 home 按鈕,返回主畫面,或全屏之間切換應用程式等。
說明:當應用程式將要進入非使用中時執行,在此期間,應用程式不接收訊息或事件,比如來電話了。
3、- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"如果應用程式支援後台運行,則應用程式已經進入後台運行");
}
說明:當程式被推送到背景時候調用。所以要設定後台繼續運行,則在這個函數裡面設定即可
4、- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"應用程式將要進入活動狀態,即將進入前台運行");
}
說明:當程式從後台將要重新回到前台時候調用,這個剛好跟上面的那個方法相反。
5、- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"應用程式已進入前台,處於活動狀態");
}
說明:當應用程式進入活動狀態時執行,這個剛好跟上面那個方法相反 。
6、- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"應用程式將要退出,通常用於儲存資料和一些退出前的清理工作");
}
說明:當程式將要退出是被調用,通常是用來儲存資料和一些退出前的清理工作。這個需要要設定UIApplicationExitsOnSuspend的索引值。
7、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@"系統記憶體不足,需要進行清理工作");
}
說明:iPhone裝置只有有限的記憶體,如果為應用程式分配了太多記憶體作業系統會終止應用程式的運行,在終止前會執行這個方法,通常可以在這裡進行記憶體清理工作防止程式被終止。
8、-(void)applicationSignificantTimeChange:(UIApplication *)application
{
NSLog(@"當系統時間發生改變時執行");
}
說明:當系統時間發生改變時執行
9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
{
NSLog(@"StatusBar框將要變化");
}
說明:當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框變化完成後執行
另外還有一些協議方法需要知道:
Handling Remote Notifications (處理遠程訊息)
-(void)
application:(UIApplication *)
applicationdidReceiveRemoteNotification:(NSDictonary *) userinfo
說明:當一個運行著的應用程式收到一個遠端通知 發送到委託去...
-(void)
application:(UIApplication *)
applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken
說明:當一個應用程式成功的註冊一個推送服務(APS) 發送到委託去...
-(void)
application:(UIApplication *)
applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error
說明:當 APS無法成功的完成向 程式進程推送時 發送到委託去...
Handling Local Notification (處理本地訊息)
-(void)
application:(UIApplication *)
applicationdidReceiveLocalNotification:(UILocalNotification *)notification
說明:當一個運行著的應用程式收到一個本地的通知 發送到委託去...
Responding to Content Protections Changes(響應受保護內容的改變)
-applicationProtectedDataWillBecomeUnavailable:
說明:通知委託,受保護的檔案當前變為停用
-applicationProtectedDataWillBecomeAvailable:
說明:通知委託 受保護的檔案當前變為可用 摘自:http://blog.sina.com.cn/s/blog_bf9843bf0101kgyr.html 感謝!!!
IOS應用程式生命週期的AppDelegate詳解