IOS 中的 AppDelegate.m/h

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接 口提供生命週期函數來處理應用程序以及應用程序的系統事件,這些生命週期函數以下表所示:

一、- (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)
    {
    }


二、-  (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"應用程序將要進入非活動狀態,即將進入後臺");
}
在應用程序將要由活動狀態切換到非活動狀態時候,要執行的委託調用,如 按下 home 按鈕,返回主屏幕,或全屏之間切換應用程序等。                                        
說明:當應用程序將要進入非活動狀態時執行,在此期間,應用程序不接收消息或事件,好比來電話了。

三、- (void)applicationDidEnterBackground:(UIApplication *)application
{
      NSLog(@"若是應用程序支持後臺運行,則應用程序已經進入後臺運行"); 
}

說明:當程序被推送到後臺的時候調用。因此要設置後臺繼續運行,則在這個函數裏面設置便可


四、-  (void)applicationWillEnterForeground:(UIApplication *)application
{
      NSLog(@"應用程序將要進入活動狀態,即將進入前臺運行");
}
說明:當程序從後臺將要從新回到前臺時候調用,這個恰好跟上面的那個方法相反。

五、- (void)applicationDidBecomeActive:(UIApplication *)application
{
     NSLog(@"應用程序已進入前臺,處於活動狀態");
}
說明:當應用程序進入活動狀態時執行,這個恰好跟上面那個方法相反 。

六、-  (void)applicationWillTerminate:(UIApplication *)application
{
     NSLog(@"應用程序將要退出,一般用於保存數據和一些退出前的清理工做"); 
}
說明:當程序將要退出是被調用,一般是用來保存數據和一些退出前的清理工做。這個須要要設置UIApplicationExitsOnSuspend的鍵值。

七、-  (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    NSLog(@"系統內存不足,須要進行清理工做");
}
說明:iPhone設備只有有限的內存,若是爲應用程序分配了太多內存操做系統會終止應用程序的運行,在終止前會執行這個方法,一般能夠在這裏進行內存清理工做防止程序被終止。

八、-(void)applicationSignificantTimeChange:(UIApplication *)application
{
    NSLog(@"當系統時間發生改變時執行");
}
說明:當系統時間發生改變時執

九、-  (void)application:(UIApplication)application  willChangeStatusBarFrame:(CGRect)newStatusBarFrame
{
   NSLog(@"StatusBar框將要變化");
}
說明:當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框變化完成後執行

另外還有一些協議方法須要知道:
Handling Remote Notifications  (處理遠程消息)

程序員

-(voidapplication:(UIApplication *) applicationdidReceiveRemoteNotification:(NSDictonary *) userinfo
說明:當一個運行着的應用程序收到一個遠程的通知 發送到委託去...
-(voidapplication:(UIApplication *) applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken
說明:當一個應用程序成功的註冊一個推送服務(APS) 發送到委託去...
-(voidapplication:(UIApplication *) applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error
說明:當 APS沒法成功的完成向 程序進程推送時 發送到委託去...app

Handling Local Notification (處理本地消息)函數

-(voidapplication:(UIApplication *) applicationdidReceiveLocalNotification:(UILocalNotification *)notification
說明:當一個運行着的應用程序收到一個本地的通知 發送到委託去...url

Responding to Content Protections Changes(響應受保護內容的改變)spa

-applicationProtectedDataWillBecomeUnavailable:
說明:通知委託,受保護的文件當前變爲不可用的
-applicationProtectedDataWillBecomeAvailable:
說明:通知委託  受保護的文件當前變爲可用操作系統

相關文章
相關標籤/搜索