簡述UIViewController的生命周期
[toc]
第一步:初始化
init(這里包括兩個函數(shù)):
- initWithNibName 非storyBoard(xib或非xib)都走這個方法
- initWithCoder 如果連接使用了storyBoard 走這個方法
awakeFromNib
當(dāng)awakeFromNib方法被調(diào)用時豫领,所有視圖的outlet和action已經(jīng)連接,但還沒有被確定,這個方法可以算作適合視圖控制器的實例化配合一起使用的志膀,因為有些需要根據(jù)用戶喜好來進行設(shè)置的內(nèi)容,無法存在storyBoard或xib中,所以可以在awakeFromNib方法中被加載進來。
第二步:加載視圖
loadView
loadView 方法不應(yīng)該直接被調(diào)用谈截,而是由系統(tǒng)調(diào)用照捡。它會加載或創(chuàng)建一個 view 并把它賦值給 UIViewController 的 view 屬性挣磨。
直接調(diào)用容易造成死循環(huán)。viewDidLoad
當(dāng) loadView 將 View 加載完成侵续,會調(diào)用 viewDidLoad 方法燎潮,該方法在 UIViewController 初始化過程中只會執(zhí)行一次喻鳄。
第三步:視圖布局(頁面每次出現(xiàn)都會調(diào)用)
- viewWillAppear
- viewWillLayoutSubviews
- viewDidLayoutSubviews
- viewDidAppear
第四步:頁面消失(通常是 push/pop )
- viewWillDisappear
- viewDidDisappear
第五步:銷毀
- dealloc
- didRecieveMemoryWarning
實踐結(jié)果:
采用 StoryBoard,主要操作是進入界面后點擊 Button push 進入界面 B 然后在 pop 回來跟啤。
2018-06-26 22:35:03.309759+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A initWithCoder:]
2018-06-26 22:35:03.315788+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A awakeFromNib]
2018-06-26 22:35:03.339617+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewDidLoad]
2018-06-26 22:35:03.340237+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewWillAppear:]
2018-06-26 22:35:03.342314+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewWillLayoutSubviews]
2018-06-26 22:35:03.342666+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewDidLayoutSubviews]
2018-06-26 22:35:03.348016+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewDidAppear:]
2018-06-26 22:37:12.349655+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B initWithCoder:]
2018-06-26 22:37:12.350268+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B awakeFromNib]
2018-06-26 22:37:12.359895+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewDidLoad]
2018-06-26 22:37:12.360171+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewWillDisappear:]
2018-06-26 22:37:12.360355+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewWillAppear:]
2018-06-26 22:37:12.391055+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewWillLayoutSubviews]
2018-06-26 22:37:12.391247+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewDidLayoutSubviews]
2018-06-26 22:37:12.897245+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewDidDisappear:]
2018-06-26 22:37:12.897622+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewDidAppear:]
2018-06-26 22:37:17.054357+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewWillDisappear:]
2018-06-26 22:37:17.054547+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewWillAppear:]
2018-06-26 22:37:17.558813+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B viewDidDisappear:]
2018-06-26 22:37:17.559031+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_A viewDidAppear:]
2018-06-26 22:37:17.559270+0800 LifeCircle_UIViewController[1696:83562] -[ViewController_B dealloc]