iOS AppDelegate生命周期

application:didFinishLaunchingWithOptions:詳解

iOS 程序啟動(dòng)時(shí)總會(huì)調(diào)用application:didFinishLaunchingWithOptions:,其中第二個(gè)參數(shù)launchOptions為NSDictionary類(lèi)型的對(duì)象梳虽,里面存儲(chǔ)有此程序啟動(dòng)的原因摔寨。

launchOptions中的可能鍵值見(jiàn)UIApplication Class Reference的Launch Options Keys節(jié) 。

若用戶(hù)直接啟動(dòng)怖辆,lauchOptions內(nèi)無(wú)數(shù)據(jù);

若由其他應(yīng)用程序通過(guò)openURL:啟動(dòng)是复,則UIApplicationLaunchOptionsURLKey對(duì)應(yīng)的對(duì)象為啟動(dòng)URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對(duì)應(yīng)啟動(dòng)的源應(yīng)用程序的bundle ID (NSString);

若由本地通知啟動(dòng)竖螃,則UIApplicationLaunchOptionsLocalNotificationKey對(duì)應(yīng)的是為啟動(dòng)應(yīng)用程序的的本地通知對(duì)象(UILocalNotification)淑廊;

若由遠(yuǎn)程通知啟動(dòng),則UIApplicationLaunchOptionsRemoteNotificationKey對(duì)應(yīng)的是啟動(dòng)應(yīng)用程序的的遠(yuǎn)程通知信息userInfo(NSDictionary)特咆;

其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,

UIApplicationLaunchOptionsNewsstandDownloadsKey季惩。

如果要在啟動(dòng)時(shí),做出一些區(qū)分腻格,那就需要在下面的代碼做處理画拾。

比如:您的應(yīng)用可以被某個(gè)其它應(yīng)用調(diào)起(作為該應(yīng)用的子應(yīng)用),要實(shí)現(xiàn)單點(diǎn)登錄菜职,那就需要在啟動(dòng)代碼的地方做出合理的驗(yàn)證青抛,并跳過(guò)登錄。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{


}


IOS 中的 AppDelegate.m/h 文件是很重要的呢酬核,因?yàn)樗菍?duì) Application 的整個(gè)生命周期進(jìn)行管理的蜜另。

先明白,每個(gè)iPhone應(yīng)用程序都有一個(gè)UIApplication嫡意,UIApplication是iPhone應(yīng)用程序的開(kāi)始并且負(fù)責(zé)初始化并顯 示 UIWindow举瑰,并負(fù)責(zé)加載應(yīng)用程序的第一個(gè)UIView到UIWindow窗體中。UIApplication的另一個(gè)任務(wù)是幫助管理應(yīng)用程序的 生命 周期蔬螟,而UIApplication通過(guò)一個(gè)名字為UIApplicationDelegate的代理類(lèi)來(lái)履行這個(gè)任務(wù)此迅。盡管 UIApplication 會(huì)負(fù)責(zé)接收事件,而UIApplicationDelegate則決定應(yīng)用程序如何去響應(yīng)這些事 件旧巾,UIApplicationDelegate可以處理 的事件包括應(yīng)用程序的生命周期事件(比如程序啟動(dòng)和關(guān)閉)耸序、系統(tǒng)事件(比如來(lái)電、記事項(xiàng)警 告)菠齿,本文會(huì)介紹如何加載應(yīng)用程序的UIView到 UIWindow以及如何利用UIApplicationDelegate處理系統(tǒng)事件佑吝。

通 常對(duì)于UIApplication讀者是沒(méi)必要修改它的,只需要知道UIApplication接收系統(tǒng)事件即可绳匀,而如何編寫(xiě)代碼來(lái)處理這些系統(tǒng)事件 則 是程序員的工作芋忿。處理系統(tǒng)事件需要編寫(xiě)一個(gè)繼承自UIApplicationDelegate接口的類(lèi)炸客,而 UIApplicationDelegate接 口提供生命周期函數(shù)來(lái)處理應(yīng)用程序以及應(yīng)用程序的系統(tǒng)事件,這些生命周期函數(shù)如下表所示:

1戈钢、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

NSLog(@"當(dāng)程序載入后執(zhí)行");

}

說(shuō)明:當(dāng)程序載入后執(zhí)行痹仙,應(yīng)用程序啟動(dòng)入口。只在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行一次殉了。也就是說(shuō)在應(yīng)用程序啟動(dòng)后开仰,要執(zhí)行的委托調(diào)用。application參數(shù)用來(lái)獲取應(yīng)用程序的狀態(tài)薪铜、變量等众弓,值得注意的是字典參數(shù):(NSDictionary *)launchOptions,該參數(shù)存儲(chǔ)程序啟動(dòng)的原因隔箍。

若用戶(hù)直接啟動(dòng)谓娃,lauchOptions內(nèi)無(wú)數(shù)據(jù);

若由其他應(yīng)用程序通過(guò)openURL:啟動(dòng),則UIApplicationLaunchOptionsURLKey對(duì)應(yīng)的對(duì)象為啟動(dòng) URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對(duì)應(yīng)啟動(dòng)的源應(yīng)用程序的 bundle ID (NSString)蜒滩;

若由本地通知啟動(dòng)滨达,則UIApplicationLaunchOptionsLocalNotificationKey對(duì)應(yīng)的是為啟動(dòng)應(yīng)用程序的的本地通知對(duì)象(UILocalNotification);

若由遠(yuǎn)程通知啟動(dòng)俯艰,則UIApplicationLaunchOptionsRemoteNotificationKey對(duì)應(yīng)的是啟動(dòng)應(yīng)用程序的的遠(yuǎn)程通知信息userInfo(NSDictionary)捡遍;

其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,

UIApplicationLaunchOptionsNewsstandDownloadsKey。

如果要在啟動(dòng)時(shí)竹握,做出一些區(qū)分画株,那就需要在下面的代碼做處理。比如:應(yīng)用可以被某個(gè)其它應(yīng)用調(diào)起(作為該應(yīng)用的子應(yīng)用)涩搓,要實(shí)現(xiàn)單點(diǎn)登錄污秆,那就需要在啟動(dòng)代碼的地方做出合理的驗(yàn)證,并跳過(guò)登錄昧甘。

例子:

- (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(@"應(yīng)用程序?qū)⒁M(jìn)入非活動(dòng)狀態(tài)战得,即將進(jìn)入后臺(tái)");

}

在應(yīng)用程序?qū)⒁苫顒?dòng)狀態(tài)切換到非活動(dòng)狀態(tài)時(shí)候充边,要執(zhí)行的委托調(diào)用,如 按下 home 按鈕常侦,返回主屏幕浇冰,或全屏之間切換應(yīng)用程序等。

說(shuō)明:當(dāng)應(yīng)用程序?qū)⒁M(jìn)入非活動(dòng)狀態(tài)時(shí)執(zhí)行聋亡,在此期間肘习,應(yīng)用程序不接收消息或事件,比如來(lái)電話(huà)了坡倔。

3漂佩、- (void)applicationDidEnterBackground:(UIApplication *)application

{

NSLog(@"如果應(yīng)用程序支持后臺(tái)運(yùn)行脖含,則應(yīng)用程序已經(jīng)進(jìn)入后臺(tái)運(yùn)行");

}

說(shuō)明:當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行投蝉,則在這個(gè)函數(shù)里面設(shè)置即可

4养葵、-? (void)applicationWillEnterForeground:(UIApplication *)application

{

NSLog(@"應(yīng)用程序?qū)⒁M(jìn)入活動(dòng)狀態(tài),即將進(jìn)入前臺(tái)運(yùn)行");

}

說(shuō)明:當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用瘩缆,這個(gè)剛好跟上面的那個(gè)方法相反关拒。

5、- (void)applicationDidBecomeActive:(UIApplication *)application

{

NSLog(@"應(yīng)用程序已進(jìn)入前臺(tái)庸娱,處于活動(dòng)狀態(tài)");

}

說(shuō)明:當(dāng)應(yīng)用程序進(jìn)入活動(dòng)狀態(tài)時(shí)執(zhí)行着绊,這個(gè)剛好跟上面那個(gè)方法相反 。

6熟尉、-? (void)applicationWillTerminate:(UIApplication *)application

{

NSLog(@"應(yīng)用程序?qū)⒁顺雠先幔ǔS糜诒4鏀?shù)據(jù)和一些退出前的清理工作");

}

說(shuō)明:當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作臣樱。這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值靶擦。

7、-? (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

{

NSLog(@"系統(tǒng)內(nèi)存不足雇毫,需要進(jìn)行清理工作");

}

說(shuō)明:iPhone設(shè)備只有有限的內(nèi)存玄捕,如果為應(yīng)用程序分配了太多內(nèi)存操作系統(tǒng)會(huì)終止應(yīng)用程序的運(yùn)行,在終止前會(huì)執(zhí)行這個(gè)方法棚放,通趁墩常可以在這里進(jìn)行內(nèi)存清理工作防止程序被終止。

8飘蚯、-(void)applicationSignificantTimeChange:(UIApplication *)application

{

NSLog(@"當(dāng)系統(tǒng)時(shí)間發(fā)生改變時(shí)執(zhí)行");

}

說(shuō)明:當(dāng)系統(tǒng)時(shí)間發(fā)生改變時(shí)執(zhí)行

9馍迄、-? (void)application:(UIApplication)application? willChangeStatusBarFrame:(CGRect)newStatusBarFrame

{

NSLog(@"StatusBar框?qū)⒁兓?);

}

說(shuō)明:當(dāng)StatusBar框?qū)⒁兓瘯r(shí)執(zhí)行

10、-? (void)application:(UIApplication*)application willChangeStatusBarOrientation:

(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration

{

}

說(shuō)明:當(dāng)StatusBar框方向?qū)⒁兓瘯r(shí)執(zhí)行

11局骤、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

{

}

說(shuō)明:當(dāng)通過(guò)url執(zhí)行

12攀圈、-? (void)application:(UIApplication*)application? didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

{

}

說(shuō)明:當(dāng)StatusBar框方向變化完成后執(zhí)行

13、-? (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame

{

}

說(shuō)明:當(dāng)StatusBar框變化完成后執(zhí)行

另外還有一些協(xié)議方法需要知道:

Handling Remote Notifications? (處理遠(yuǎn)程消息)

-(void) application:(UIApplication *) applicationdidReceiveRemoteNotification:(NSDictonary *) userinfo

說(shuō)明:當(dāng)一個(gè)運(yùn)行著的應(yīng)用程序收到一個(gè)遠(yuǎn)程的通知 發(fā)送到委托去...

-(void) application:(UIApplication *) applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken

說(shuō)明:當(dāng)一個(gè)應(yīng)用程序成功的注冊(cè)一個(gè)推送服務(wù)(APS) 發(fā)送到委托去...

-(void) application:(UIApplication *) applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error

說(shuō)明:當(dāng) APS無(wú)法成功的完成向 程序進(jìn)程推送時(shí) 發(fā)送到委托去...

Handling Local Notification (處理本地消息)

-(void) application:(UIApplication *) applicationdidReceiveLocalNotification:(UILocalNotification *)notification

說(shuō)明:當(dāng)一個(gè)運(yùn)行著的應(yīng)用程序收到一個(gè)本地的通知 發(fā)送到委托去...

Responding to Content Protections Changes(響應(yīng)受保護(hù)內(nèi)容的改變)

-applicationProtectedDataWillBecomeUnavailable:

說(shuō)明:通知委托峦甩,受保護(hù)的文件當(dāng)前變?yōu)椴豢捎玫?/p>

-applicationProtectedDataWillBecomeAvailable:

說(shuō)明:通知委托? 受保護(hù)的文件當(dāng)前變?yōu)榭捎?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赘来,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凯傲,更是在濱河造成了極大的恐慌犬辰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冰单,死亡現(xiàn)場(chǎng)離奇詭異幌缝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诫欠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)涵卵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浴栽,“玉大人,你說(shuō)我怎么就攤上這事缘厢〕远龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵贴硫,是天一觀的道長(zhǎng)椿每。 經(jīng)常有香客問(wèn)我,道長(zhǎng)英遭,這世上最難降的妖魔是什么间护? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮挖诸,結(jié)果婚禮上汁尺,老公的妹妹穿的比我還像新娘。我一直安慰自己多律,他們只是感情好痴突,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著狼荞,像睡著了一般辽装。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上相味,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天拾积,我揣著相機(jī)與錄音,去河邊找鬼丰涉。 笑死拓巧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的一死。 我是一名探鬼主播肛度,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摘符!你這毒婦竟也來(lái)了贤斜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逛裤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后猴抹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體带族,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蟀给,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蝙砌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳堕。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖择克,靈堂內(nèi)的尸體忽然破棺而出恬总,到底是詐尸還是另有隱情,我是刑警寧澤肚邢,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布壹堰,位于F島的核電站,受9級(jí)特大地震影響骡湖,放射性物質(zhì)發(fā)生泄漏贱纠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一响蕴、第九天 我趴在偏房一處隱蔽的房頂上張望谆焊。 院中可真熱鬧,春花似錦浦夷、人聲如沸辖试。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罐孝。三九已至,卻和暖如春懈息,著一層夾襖步出監(jiān)牢的瞬間肾档,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工辫继, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怒见,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓姑宽,卻偏偏與公主長(zhǎng)得像遣耍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炮车,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容