夯實基礎 砥礪前行 --- UIApplication(中)

UIApplication和delegate

  • 所有的移動操作系統(tǒng)都有個致命的缺點:app很容易受到打擾卒稳。比如一個來電或者是鎖屏會導致app進入后臺甚至終止弧轧。
  • 還有很多其他類似的情況都會導致app受到干擾鬼廓,app受到干擾時趁怔,會產(chǎn)生一系列系統(tǒng)事件郑兴,這時UIApplication會通知他的delegate對象,讓delegate來處理系統(tǒng)事件

delegate可處理的事件包括:

  • 應用程序的生命周期事件(如程序的啟動和關閉)
  • 系統(tǒng)事件(如來電)
  • 內(nèi)存警告
UIApplication和delegate

delegate方法講解:

//應用程序啟動完成后就會調(diào)用AppDelegate方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}
//當應用程序失去焦點的時候調(diào)用,只有當應用程序完全獲取焦點的時候才能夠與用戶交互,所謂的獲取焦點我的理解為app啟動布滿屏幕律胀。
- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
//當應用程序進入后臺時候調(diào)用
- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
//當應用程序即將進入前臺的時候調(diào)用
- (void)applicationWillEnterForeground:(UIApplication *)application {
    // 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.
}
//當應用程序獲得焦點的時候調(diào)用
- (void)applicationDidBecomeActive:(UIApplication *)application {
    // 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.
}
//當應用程序關閉的時候調(diào)用
- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end

各方法的調(diào)用時機的演示以及講解
1.程序一啟動未做任何操作
程序加載完畢宋光,并獲得焦點


程序啟動

2.點擊home鍵進入手機主界面
application先失去焦點然后 進入后臺


程序進入后臺

3.點擊應用重新進入
application進入前臺然后獲得焦點


程序進入前臺

4.雙擊home鍵關閉程序
程序關閉
關閉程序

由控制臺打印結(jié)果可知按照上面的操作,先后順序為:
程序加載完畢-->程序獲得焦點-->程序失去焦點-->程序進入后臺-->程序進入前臺-->程序獲得焦點-->程序關閉

程序的啟動流程

講解

演示main以及控制臺打印結(jié)果

查看官方文檔炭菌,了解參數(shù)的介紹
第三個參數(shù):UIApplication類名或者子類的名稱跃须,如果傳nil的話默認為@“UIApplication”
第四個參數(shù):UIApplication的代理的類型名稱,蘋果使用NSStringFromClass([AppDelegate class])方法娃兽,獲得對應類名,使用該方法除了可以避免輸入錯誤的同時還具有提示功能尽楔。


官方文檔

UIApplication底層實現(xiàn)原理:

1.根據(jù)principalClassName(第三個參數(shù))傳遞的類名創(chuàng)建一個UIApplication對象
2.創(chuàng)建UIApplication代理對象投储,給UIApplication對象設置代理
3.開啟主運行事件循環(huán)第练,處理事件,保持程序一直運行(后期runloop講解)
4.加載Info.plist玛荞,判斷application的Info.pist文件是否指定main娇掏,如果指定main就會記載nib文件

iOS程序的啟動過程流程圖

流程圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市勋眯,隨后出現(xiàn)的幾起案子婴梧,更是在濱河造成了極大的恐慌,老刑警劉巖客蹋,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件塞蹭,死亡現(xiàn)場離奇詭異,居然都是意外死亡讶坯,警方通過查閱死者的電腦和手機番电,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辆琅,“玉大人漱办,你說我怎么就攤上這事⊥裱蹋” “怎么了娩井?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長似袁。 經(jīng)常有香客問我洞辣,道長,這世上最難降的妖魔是什么叔营? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任屋彪,我火速辦了婚禮,結(jié)果婚禮上绒尊,老公的妹妹穿的比我還像新娘畜挥。我一直安慰自己,他們只是感情好婴谱,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布蟹但。 她就那樣靜靜地躺著,像睡著了一般谭羔。 火紅的嫁衣襯著肌膚如雪华糖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天瘟裸,我揣著相機與錄音客叉,去河邊找鬼。 笑死,一個胖子當著我的面吹牛兼搏,可吹牛的內(nèi)容都是我干的卵慰。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼佛呻,長吁一口氣:“原來是場噩夢啊……” “哼裳朋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吓著,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鲤嫡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绑莺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暖眼,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年紊撕,在試婚紗的時候發(fā)現(xiàn)自己被綠了罢荡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡对扶,死狀恐怖区赵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浪南,我是刑警寧澤笼才,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站络凿,受9級特大地震影響骡送,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜絮记,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一摔踱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怨愤,春花似錦派敷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至差导,卻和暖如春试躏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背设褐。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工颠蕴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泣刹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓犀被,卻偏偏與公主長得像项玛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弱判,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)锥惋,斷路器昌腰,智...
    卡卡羅2017閱讀 134,711評論 18 139
  • 程序啟動原理 掌握 Info.plist和pch文件的作用 UIApplication的常見使用 AppDeleg...
    JonesCxy閱讀 813評論 0 1
  • 父類實現(xiàn)深拷貝時,子類如何實現(xiàn)深度拷貝膀跌。父類沒有實現(xiàn)深拷貝時遭商,子類如何實現(xiàn)深度拷貝。? 深拷貝同淺拷貝的區(qū)別:淺拷...
    JonesCxy閱讀 1,021評論 1 7
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,307評論 25 707
  • 在周末的午后捅伤,如果不出門劫流,總覺得有些孤單的可怕,在諾大的城市丛忆,卻在狹小的房間一個人悄無聲息的過著祠汇。早上一覺睡到十點...
    waitine閱讀 477評論 9 2