iOS-關(guān)于應(yīng)用&程序啟動&視圖的生命周期原理小結(jié)

前言:

所有的移動操作系統(tǒng)都有個致命的缺點(diǎn):app很容易受到打擾。比如一個來電或者鎖屏?xí)?dǎo)致app進(jìn)入后臺甚至被終止

還有很多其它類似的情況會導(dǎo)致app受到干擾,在app受到干擾時,會產(chǎn)生一些系統(tǒng)事件,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統(tǒng)事件

delegate可處理的事件包括:

 - 應(yīng)用程序的生命周期事件(如程序啟動和關(guān)閉)
 - 系統(tǒng)事件(如來電)
 - 內(nèi)存警告
應(yīng)用的生命周期--->啟動過程:

應(yīng)用啟動過程

這些UIApplicationDelegate,監(jiān)聽?wèi)?yīng)用程序的生命周期,監(jiān)聽內(nèi)存警告,系統(tǒng)事件

當(dāng)應(yīng)用程序啟動完畢的時候就會調(diào)用 (系統(tǒng)自動調(diào)用)

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

    NSLog(@"%s",__func__);

    return YES;
 }

即將失去活動狀態(tài)的時候調(diào)用(失去焦點(diǎn), 不可交互)

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

     NSLog(@"%s",__func__);

 }

應(yīng)用程序即將進(jìn)入前臺的時候調(diào)用(一般在該方法中恢復(fù)應(yīng)用程序的數(shù)據(jù),以及狀態(tài))

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

     NSLog(@"%s",__func__);

 }

應(yīng)用程序進(jìn)入后臺的時候調(diào)用 (一般在該方法中保存應(yīng)用程序的數(shù)據(jù), 以及狀態(tài))

 - (void)applicationDidEnterBackground:(UIApplication *)application
 {
      NSLog(@"Background");
  }

重新獲取焦點(diǎn)(能夠和用戶交互)

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

     NSLog(@"%s",__func__);

 }

應(yīng)用程序即將被銷毀的時候會調(diào)用該方法
注意:如果應(yīng)用程序處于掛起狀態(tài)的時候無法調(diào)用該方法

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

   }

應(yīng)用程序接收到內(nèi)存警告的時候就會調(diào)用
一般在該方法中釋放掉不需要的內(nèi)存

  - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

 {

     NSLog(@"%s",__func__);

 }

應(yīng)用程序一般有五個狀態(tài):官方文檔app.states

程序啟動生命周期:--> (啟動過程)

~~A篇:啟動原理 ~~

 ① 執(zhí)行main 函數(shù),調(diào)用 main 函數(shù)里的 UIApplicationMain 函數(shù)。

   intUIApplicationMain(int argc, char argv[], NSString principalClassName, NSString *delegateClassName);
   argc、argv:直接傳遞給UIApplicationMain進(jìn)行相關(guān)處理即可
   principalClassName:指定應(yīng)用程序類名(app的象征),該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認(rèn)值
   delegateClassName:指定應(yīng)用程序的代理類,該類必須遵守
   UIApplicationDelegate協(xié)議

  ② UIApplicationMain函數(shù)會根據(jù)principalClassName創(chuàng)建UIApplication對象,
    根據(jù)delegateClassName創(chuàng)建一個delegate對象,并將該delegate對象賦值給
    UIApplication對象中的delegate屬性

 ③ 接著會建立應(yīng)用程序的Main Runloop(事件循環(huán)),進(jìn)行事件的處理(首先會在
   程序完畢后調(diào)用delegate對象的application:didFinishLaunchingWithOptions:方法)

 ④ 程序正常退出時UIApplicationMain函數(shù)才返回

 - **系統(tǒng)入口的代碼和參數(shù)說明:**
  argc:系統(tǒng)或者用戶傳入的參數(shù)
  argv:系統(tǒng)或用戶傳入的實(shí)際參數(shù)

  1.根據(jù)傳入的第三個參數(shù),創(chuàng)建UIApplication對象
  2.根據(jù)傳入的第四個產(chǎn)生創(chuàng)建UIApplication對象的代理
  3.設(shè)置剛剛創(chuàng)建出來的代理對象為UIApplication的代理
  4.開啟一個事件循環(huán)(可以理解為里面是一個死循環(huán))這個時間循環(huán)是一個隊(duì)列(先進(jìn)先出)先添加進(jìn)去的先處理

B篇:(完整啟動過程)

1.執(zhí)行main 函數(shù),調(diào)用 main 函數(shù)里的 UIApplicationMain 函數(shù)。

2.創(chuàng)建UIApplication

 ① 打開網(wǎng)頁,發(fā)短信,打電話 
 ② 設(shè)置應(yīng)用程序提醒數(shù)字
 ③ 設(shè)置聯(lián)網(wǎng)狀態(tài)
 ④ 設(shè)置狀態(tài)欄

3.創(chuàng)建AppDelegate代理對象,并且成為AppDelegate代理

 ① 監(jiān)聽整個App的生命周期
 ② 處理內(nèi)存警告

4.開啟主運(yùn)循環(huán),保證程序一直運(yùn)行

 ① 每一個線程都有runloop
 ② 主線程有一個runloop

5.加載info.plist (判斷是否加載了main.storyboard)

  • 情況1:--> 如果指定(沒有storyboard)
    就會在application:didFinishLaunchingWithOptions:中

     ① 創(chuàng)建窗口
     ② 設(shè)置根控制器
     ③ 顯示窗口
    
  • 情況2:--> 如果加載的Info.plist文件里的Main storyboard:
    系統(tǒng)會自動調(diào)用 (不用我們管)

     ① 創(chuàng)建窗口
     ② 加載main.storyboard,并且加載main.storyboard指定的控制器
     ③ 把新創(chuàng)建的控制器,作為窗口的根控制器,讓窗口顯示出來
    

    如圖:

    程序啟動過程

視圖的生命周期--->view
視圖的生命周期
  - 1、 alloc 創(chuàng)建對象,分配空間
  - 2、 init (initWithNibName) 初始化對象,初始化數(shù)據(jù)
  - 3、 loadView 從nib載入視圖 ,除非你沒有使用xib文件創(chuàng)建視圖
  - 4、 viewDidLoad 載入完成,可以進(jìn)行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件
  - 5、 viewWillAppear視圖將出現(xiàn)在屏幕之前,馬上這個視圖就會被展現(xiàn)在屏幕上了
  - 6、 viewDidAppear 視圖已在屏幕上渲染完成
  - 7、viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行
  - 8、viewDidDisappear 視圖已經(jīng)被從屏幕上移除,用戶看不到這個視圖了
  - 9、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進(jìn)行釋放.
  - 10、viewVillUnload- 當(dāng)內(nèi)存過低,即將釋放時調(diào)用;
  - 11、viewDidUnload-當(dāng)內(nèi)存過低,釋放一些不需要的視圖時調(diào)用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,993評論 2 374

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,195評論 30 471
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • 1. 啟動流程 1.1 準(zhǔn)備知識 Mach-O Apple的操作系統(tǒng)的可執(zhí)行文件格式幾乎都是mach-o,mach...
    我有小尾巴快看閱讀 3,230評論 1 37
  • 前言: 這部分內(nèi)容,對于大部分人來說使用起來可能已經(jīng)非常熟練,但是涉及到的細(xì)節(jié)還是挺多的,對于新開發(fā)者可能不是...
    饒鵬偉閱讀 983評論 1 5
  • (還待嫁哦(???? ???)) 上色廢 線稿寫實(shí)風(fēng)?? 不知道有沒有人喜歡這樣的style嘿嘿 整天躺尸畫畫消遣...
    阿念_閱讀 545評論 4 2