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

前言:

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

還有很多其它類似的情況會導(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)用(失去焦點, 不可交互)

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

     NSLog(@"%s",__func__);

 }

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

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

     NSLog(@"%s",__func__);

 }

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

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

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

 - (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進行相關(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))眯勾,進行事件的處理(首先會在
   程序完畢后調(diào)用delegate對象的application:didFinishLaunchingWithOptions:方法)

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

 - **系統(tǒng)入口的代碼和參數(shù)說明:**
  argc:系統(tǒng)或者用戶傳入的參數(shù)
  argv:系統(tǒng)或用戶傳入的實際參數(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)是一個隊列(先進先出)先添加進去的先處理

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.開啟主運循環(huá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 載入完成,可以進行自定義數(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)建的對象進行釋放.
  - 10胯府、viewVillUnload- 當(dāng)內(nèi)存過低,即將釋放時調(diào)用恨胚;
  - 11骂因、viewDidUnload-當(dāng)內(nèi)存過低,釋放一些不需要的視圖時調(diào)用赃泡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寒波,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子升熊,更是在濱河造成了極大的恐慌俄烁,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僚碎,死亡現(xiàn)場離奇詭異猴娩,居然都是意外死亡阴幌,警方通過查閱死者的電腦和手機勺阐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矛双,“玉大人渊抽,你說我怎么就攤上這事∫楹觯” “怎么了懒闷?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長栈幸。 經(jīng)常有香客問我愤估,道長,這世上最難降的妖魔是什么速址? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任玩焰,我火速辦了婚禮,結(jié)果婚禮上芍锚,老公的妹妹穿的比我還像新娘昔园。我一直安慰自己,他們只是感情好并炮,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布默刚。 她就那樣靜靜地躺著,像睡著了一般逃魄。 火紅的嫁衣襯著肌膚如雪荤西。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音皂冰,去河邊找鬼店展。 笑死,一個胖子當(dāng)著我的面吹牛秃流,可吹牛的內(nèi)容都是我干的赂蕴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼舶胀,長吁一口氣:“原來是場噩夢啊……” “哼概说!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嚣伐,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤糖赔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后轩端,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體放典,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年基茵,在試婚紗的時候發(fā)現(xiàn)自己被綠了奋构。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡拱层,死狀恐怖弥臼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情根灯,我是刑警寧澤径缅,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站烙肺,受9級特大地震影響纳猪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桃笙,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一氏堤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怎栽,春花似錦丽猬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至强饮,卻和暖如春由桌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工行您, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铭乾,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓娃循,卻偏偏與公主長得像炕檩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捌斧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

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