關(guān)于iOS應用的生命周期

我們第一次打開Xcode的iOS應用模版時舔清,首先會讓我們?nèi)リP(guān)注的是應用的主函數(shù)蔼夜,也就是一個程序的入口矩欠。工程里的主函數(shù)main.m就是這個樣子的

#import <UIKit/UIKit.h>#import "AppDelegate.h"int main(int argc, char * argv[]) {
         @autoreleasepool { 
                return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
          }
}

一看~這個主函數(shù)好簡介啊猾蒂,只用了一個函數(shù)询一,就建立起了我們的應用隐孽。

點擊進入查看官方文檔癌椿,可以發(fā)現(xiàn)其中的前兩個參數(shù)和我們熟悉的C語言主函數(shù)的入口的參數(shù)相同,如果學過C應該很容易理解菱阵。所以讓我們來看看后面兩個參數(shù)踢俄。第三個參數(shù)大多是nil,它的類型是NSString *,代表應用程序單例UIApplication的名字,如果填入nil就代表是模板給我們創(chuàng)建好的該對象送粱。后面一個是應用程序代理褪贵,這里用到了iOS常用的委托代理的模式。用一個UIResponder類的實例AppDelegate作為這個應用的委托對象抗俄。雖然官方文檔里這個函數(shù)的有返回值int但是這個函數(shù)卻不會返回東西脆丁。原因就在于iOS APP的一個運行機制。

core_objects_2x.png

可以把一個APP想象成一個運行時不會終止动雹,一直等待事件發(fā)生的循環(huán)體槽卫,叫做The Main Run Loop。(事件包括兩類:一類是對屏幕的點擊胰蝠,一類是搖動或按耳機鍵等等歼培。)

event_draw_cycle_a_2x.png

So,在任何時間你的APP只會處于下面這幾個狀態(tài):

狀態(tài) 界面是否可見 是否接收事件 是否能執(zhí)行代碼
未運行 Not running
激活 Active
未激活 Inactive 大部分
后臺運行 Background
掛起 Suspended

相應的會觸發(fā)AppDelegate.m中的以下方法(這些方法在UIApplicationDelegate協(xié)議中):PS:身邊有電腦的童鞋茸塞,也可以隨意打開一個項目躲庄,在以下方法中加入這句代碼NSLog(@"%@", NSStringFromSelector(_cmd));然后在調(diào)用這個方法的時候就會在控制臺打印出該方法的名字niao > ~ <

1. 未運行 Not running -> 激活 Active

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
     NSLog(@"%@", NSStringFromSelector(_cmd)); retrun YES;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%@", NSStringFromSelector(_cmd)); // Override point for customization after application launch. return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application{ 
    NSLog(@"%@", NSStringFromSelector(_cmd)); 
// Restart any tasks that were paused (or not yet started) while the application was inactive.
// If the application was previously in the background, optionally refresh the user interface.
}

2.激活 Active -> 未激活 Inactive (eg. 當按下home鍵 或 接入電話時觸發(fā))

- (void)applicationWillResignActive:(UIApplication *)application{ NSLog(@"%@", NSStringFromSelector(_cmd));
}

3.未激活 Inactive -> 后臺運行 Background

- (void)applicationDidEnterBackground:(UIApplication *)application{
 NSLog(@"%@", NSStringFromSelector(_cmd));
}

4.后臺運行 Background -> 掛起 Suspended ( 系統(tǒng)在APP進入后臺狀態(tài)大概 5秒 后自動觸發(fā)狀態(tài)改變)

5.掛起 Suspended -> 激活 Active(eg.重新點擊圖標時觸發(fā))

- (void)applicationWillEnterForeground:(UIApplication *)application{
 NSLog(@"%@", NSStringFromSelector(_cmd)); 
// Called as part of the transition from the background to the inactive state
// here you can undo many of the changes made on entering the background.
}

6.掛起 Suspended -> 未運行 Not running(退出APP時調(diào)用,可以在這里保存數(shù)據(jù))

- (void)applicationWillTerminate:(UIApplication *)application{
 NSLog(@"%@", NSStringFromSelector(_cmd));
 //Save data if appropriate.
}

結(jié)(fei)語(hua):

1.UIApplicationDelegate協(xié)議中還不止這8個方法钾虐,但是列出來的這個幾個用得比較多也比較典型噪窘。有興趣的可以查閱UIApplicationDelegate協(xié)議官方文檔

2.第一次寫簡書效扫,好累啊T—T
但是如果能給各位看官提供到一點點幫助倔监,也就有了價值。
從寫的過程中也收獲不少吧~以后每周都堅持寫一點菌仁,歡迎大家關(guān)注浩习!
相互學習,共同進步济丘。

參考文檔:
https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html#//apple_ref/doc/uid/TP40007072-CH2-SW2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谱秽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摹迷,更是在濱河造成了極大的恐慌弯院,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泪掀,死亡現(xiàn)場離奇詭異听绳,居然都是意外死亡,警方通過查閱死者的電腦和手機异赫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門椅挣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來头岔,“玉大人,你說我怎么就攤上這事鼠证∠靠ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵量九,是天一觀的道長适掰。 經(jīng)常有香客問我,道長荠列,這世上最難降的妖魔是什么类浪? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮肌似,結(jié)果婚禮上费就,老公的妹妹穿的比我還像新娘。我一直安慰自己川队,他們只是感情好力细,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著固额,像睡著了一般眠蚂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斗躏,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天逝慧,我揣著相機與錄音,去河邊找鬼瑟捣。 笑死,一個胖子當著我的面吹牛栅干,可吹牛的內(nèi)容都是我干的迈套。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼碱鳞,長吁一口氣:“原來是場噩夢啊……” “哼桑李!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窿给,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贵白,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后崩泡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁荒,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年角撞,在試婚紗的時候發(fā)現(xiàn)自己被綠了呛伴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勃痴。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖热康,靈堂內(nèi)的尸體忽然破棺而出沛申,到底是詐尸還是另有隱情,我是刑警寧澤姐军,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布铁材,位于F島的核電站,受9級特大地震影響奕锌,放射性物質(zhì)發(fā)生泄漏著觉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一歇攻、第九天 我趴在偏房一處隱蔽的房頂上張望固惯。 院中可真熱鬧,春花似錦缴守、人聲如沸葬毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贴捡。三九已至,卻和暖如春村砂,著一層夾襖步出監(jiān)牢的瞬間烂斋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工础废, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汛骂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓评腺,卻偏偏與公主長得像帘瞭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒿讥,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

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