你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 談談AppDelegate

談談AppDelegate

編輯:IOS技巧綜合
[摘要]本文是對談談AppDelegate的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
談談AppDelegate
前言

每個iOS程序都會有一個AppDelegate的類,這個類就是一個代理類,我們新建一個Project的時候,裡面都會帶有這個類。現在就讓我們看看這個類。

開始介紹

對於AppDelegate,它的父類是UIResponder,然後實現了UIApplicationDelegate協議,這裡的方法多是協議裡面的方法,先看看默認的都有哪些方法。

1 application:didFinishLaunchingWithOptions:

它帶參是這樣的:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}
先看一下它的注釋:在應用程序啟動後,重寫自定義點。這個是最直接的解釋,一般在這裡面,我做的操作如下:
  • 不用故事板,自定義rootview
    使用其他三方類庫的時候在裡面做一些初始化操作什麼的。

參數
| 參數| 描述|
|-------------|----------------------------------------|
|application|你的app對象|
|launchOptions|一個指示app啟動原因的字典(如果有)。這個字典也可能是空的在用戶直接點擊圖標啟動的情況下。例如當程序關閉,並且有推送消息過來的時候,通過點擊推送打開app這個字典就包含推送過來的消息內容|

返回值
如果app不能處理URL資源或者繼續用戶活動,就會返回NO,否則返回YES。如果app是通過遠程推送啟動的,那麼這個返回值會被忽略。

討論
使用這個方法(包括與其相關的application: willFinishLaunchingWithOptions: )用於完成app的初始化和一些微調。這個方法在狀態復位的時候調用,但是發生在app的window和其他UI展現之前。在某些情況下,當這個方法返回值之後,系統會調用其他的代理方法。(當用戶進入前台狀態或者後台狀態的情況)。
如果你沒有在application: willFinishLaunchingWithOptions: 中處理launchOptions裡面的key值,那麼這個方法是你最後能夠處理的地方。也就是說,你應該在這裡對launchOptions裡面的值提供合適的響應。

注意
在UIApplicationDelegate中還有一個方法叫做:

-(void)applicationDidFinishLaunching:(UIApplication *)application;

當程序初始化的時候,強烈建議去使用:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}

or

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  return YES;  
}

那個applicationDidFinishLaunching:方法是個老版本iOS上使用的。

2 applicationWillResignActive:

它帶參是這樣的:

-(void)applicationWillResignActive:(UIApplication *)application {
}

告訴代理,app將要成為不活躍狀態。

先看看它的自帶的注釋:當在程序將要從active狀態到inactive狀態的時候,會發(diao)送(yong)這個消(fang)息(fa)。這個發生的場景是程序被臨時的打擾,例如打過來的電話或者是SMS信息。比如現在有電話進來,將會調用這個方法,還有就是有短信過來,然後你點擊短信(3D touch)但是不進入程序的時候,也會去調用。或者是當用戶退出程序,它開始轉換到background state的時候。當app處於inactive狀態的時候,它是繼續運行的,但是不處理任何進來的事件響應。

討論
你應該使用這個方法去暫停正在進行的任務、禁用timers、減小OpenGLES 幀速率。游戲的話需要使用這個方法來暫停游戲。在將要到active狀態或者background狀態的時候,inactive狀態的app應該做最少的工作。
如果app使用了沒有保存的用戶數據,你應該在這個方法裡面保存它確保它不丟失。然而,蘋果還是強烈建議在合適的時間去保存你的數據。千萬不要依賴特定的app狀態來保存用戶的data。

3 applicationDidEnterBackground:

它帶參數是這樣:

-(void)applicationDidEnterBackground:(UIApplication *)application {
}

告訴代理,app當前已經處於background(後台)。

先看看它自帶的注釋:使用這個方法釋放公共資源、保存用戶數據、取消定時器。並盡量存儲應用程序狀態信息,這樣萬一應用程序被終止了,將來可以恢復到當前狀態。如果app支持在後台運行,那麼用戶退出時會調用這個方法而不是applicationWillTerminate方法。

討論
除了這裡面可以執行已經進入後台的操作,app還發出了一個UIApplicationDidEnterBackgroundNotification通知,因此如果有的類或者對象需要關注這個狀態改變,可以去接收這個通知處理。

4 applicationWillEnterForeground:

它帶參數是這樣的:

-(void)applicationWillEnterForeground:(UIApplication *)application {
}

告訴代理,app將要進入前台。

先看看自帶注釋:這個方法會在應用程序從後台運行狀態轉換到活動狀態的過程中被調用,可以在這裡恢復應用程序正常運行所需信息。

討論
這裡也有一個UIApplicationWillEnterForegrounNotification的通知。

5 applicationDidBecomeActive:

它帶參數是這樣的:

-(void)applicationDidBecomeActive:(UIApplication *)application {
}

告訴代理,app已經成為active狀態。

先看看自帶注釋:重啟應用程序在非活動狀態時被站廳(或尚未啟動)的任務。如果程序之前在後台運行,那麼可以選擇是否刷洗用戶界面。

討論
當打電話的時候,程序會調用applicationWillResignAction:方法,當掛斷電話之後,程序會調用此方法。
同樣也有一個UIAppicationDidBecomeActiveNotification通知。

6 applicationWillTerminate:

它帶參數是這樣的:

-(void)applicationWillTerminate:(UIApplication *)application {
}

告訴代理方法,app將要終止。

先看看自帶注釋:程序將要終止時會調用該方法。盡可能保存需要的數據。

討論
這裡面也有一個通知:UIApplicationWillTerminateNotification。

方法執行順序

這裡沒有列出所有的方法,只是最常用的幾個方法。
1 當我們第一次打開程序的時候,執行結果如下:

2016-11-08 17:56:57.670768 CategoriesDemo[3722:737434] application:didFinishLaunchingWithOptions:
2016-11-08 17:56:57.675868 CategoriesDemo[3722:737434] applicationDidBecomeActive:

2 當程序進入後台的時候,執行結果如下:

2016-11-08 17:59:46.082466 CategoriesDemo[3722:737434] applicationWillResignActive:
2016-11-08 17:59:46.607901 CategoriesDemo[3722:737434] applicationDidEnterBackground:

3 當程序進入前台的時候,執行結果如下:

2016-11-08 18:00:27.726073 CategoriesDemo[3722:737434] applicationWillEnterForeground:
2016-11-08 18:00:28.143117 CategoriesDemo[3722:737434] applicationDidBecomeActive:

4 當有電話進來的時候(程序在前台的時候),執行結果如下:

2016-11-08 18:03:29.891976 CategoriesDemo[658:224868] applicationWillResignActive:

5 當掛掉電話的時候,執行結果如下:

2016-11-08 18:03:35.344466 CategoriesDemo[658:224868] applicationDidBecomeActive:

這裡插一句:也就是當程序在前台的時候,來電話,會執行applicationWillResignActive:方法。當電話掛掉時候,就會執行applicationDidBecomeActive:方法。

總結

1 應用程序運行狀態有以下幾種:

    Not running (app沒有啟動或者已經啟動但是被系統終結) Inactive(app在前台,但是當前沒有接收事件) Active (app正在前台運行並且接收事件) Background (app在後台,執行代碼) Suspended (app在後台,但是沒有執行的代碼)
    1348823833_6296.png
參考鏈接

1 https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved