IOS應用程式生命週期的AppDelegate詳解

來源:互聯網
上載者:User

標籤:

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詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.