iOS APP與ViewController、ViewController與ViewController的混合生命周期詳解

APP、APP與ViewController

  • 啟動(dòng)app
??  ----- didFinishLaunchingWithOptions
??  ---------- viewDidLoad
??  ---------- viewWillAppear
??  ---------- viewWillLayoutSubviews
??  ---------- viewDidLayoutSubviews
??  ---------- viewDidAppear
??  ----- applicationDidBecomeActive

總結(jié):
1,整體順序是:app加載根視圖控制器加載app活躍
2,注意:app活躍是發(fā)生在根視圖控制器DidAppear之后的
3,注意:在app的啟動(dòng)過(guò)程中是沒(méi)有將要進(jìn)入前臺(tái)(applicationWillEnterForeground)這個(gè)步驟的

  • 單擊Home鍵,app進(jìn)入后臺(tái)
??  ----- applicationWillResignActive
??  ----- applicationDidEnterBackground

總結(jié):
1,整體順序是:app將不活躍app進(jìn)入后臺(tái)
2,注意:在app進(jìn)入后臺(tái)的過(guò)程中,ViewController是不參與其中的,也就是說(shuō)當(dāng)前屏幕上顯示的ViewController并不會(huì)調(diào)用視圖控制器將要消失(viewWillDisappear)視圖控制器已經(jīng)消失(viewDidDisappear)

  • 點(diǎn)擊APP桌面圖標(biāo),app進(jìn)入前臺(tái)
??  ----- applicationWillEnterForeground
??  ----- applicationDidBecomeActive

總結(jié):
1,整體順序是:app將要進(jìn)入前臺(tái)APP活躍
2,注意:跟app進(jìn)入后臺(tái)一樣,在該過(guò)程中,ViewController是不參與其中的,在屏幕上出現(xiàn)的ViewController并不會(huì)調(diào)用視圖控制器將要顯示(viewWillAppear)視圖控制器已經(jīng)顯示(viewDidAppear)

  • app鎖屏
??  ----- applicationWillResignActive
??  ----- applicationDidEnterBackground

總結(jié):
1,app鎖屏操作所產(chǎn)生的生命周期跟app進(jìn)入后臺(tái)是相同的

  • app解鎖
??  ----- applicationWillEnterForeground
??  ----- applicationDidBecomeActive

總結(jié):
1,app解鎖操作所產(chǎn)生的生命周期跟app進(jìn)入前臺(tái)是相同的

  • app銷(xiāo)毀
??  ----- applicationWillResignActive
??  ----- applicationDidEnterBackground
??  ----- applicationWillTerminate

總結(jié):
1,整體順序是:app將不活躍app進(jìn)入后臺(tái)app將要銷(xiāo)毀
2,注意:這個(gè)過(guò)程ViewController同樣是不參與的

  • 雙擊Home鍵,由app進(jìn)入app卡片列表
??  ----- applicationWillResignActive

總結(jié):
1,在app進(jìn)入app卡片列表的過(guò)程中,僅有一步被調(diào)用:app將不活躍(applicationWillResignActive)
2,注意:如果此時(shí),用戶在app卡片列表中選擇了其他app,接下來(lái)會(huì)調(diào)用:app進(jìn)入后臺(tái)(applicationDidEnterBackground)
3,注意:如果此時(shí),用戶點(diǎn)擊Home鍵,app由app卡片列表重新回到前臺(tái),接下來(lái)會(huì)調(diào)用:app活躍(applicationDidBecomeActive),要注意的是在這個(gè)過(guò)程中并不會(huì)調(diào)用app將要進(jìn)入前臺(tái)(applicationWillEnterForeground)


ViewController與ViewController

  • vc1 PushTo / PresentTo vc2
??  -----vc2----- viewDidLoad
??  -----vc1----- viewWillDisappear
??  -----vc2----- viewWillAppear
??  -----vc2----- viewWillLayoutSubviews
??  -----vc2----- viewDidLayoutSubviews
??  -----vc2----- viewDidAppear
??  -----vc1----- viewDidDisappear
??  -----vc1----- presentViewCompleted  (optional)
    //[self dismissViewControllerAnimated:YES completion:^{
          NSLog(@"-----vc2-----dismissViewControllerCompleted");
      }];


  • vc2 PopTo / DismissTo vc1
??  -----vc2----- viewWillDisappear
??  -----vc1----- viewWillAppear
??  -----vc1----- viewDidAppear
??  -----vc2----- viewDidDisappear
??  -----vc2----- dismissViewControllerCompleted  (optional)
    //[self dismissViewControllerAnimated:YES completion:^{ 
          NSLog(@"-----vc2-----dismissViewControllerCompleted"); 
      }];
??  -----vc2----- dealloc

Demo地址:https://github.com/MajorLMJ/LMJTest_APPLifeCycle

版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 ,轉(zhuǎn)載時(shí)必須注明出處及相應(yīng)鏈接!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容