ViewController
ViewController是IOS開發(fā)中MVC模式中的C,ViewController是view的controller闯睹,ViewController的職責(zé)主要包括管理內(nèi)部各個(gè)view的加載顯示和卸載戏羽,同時(shí)負(fù)責(zé)與其他ViewController的通信和協(xié)調(diào)。
在IOS中楼吃,有兩類ViewController始花,一類是顯示內(nèi)容的,比如UIViewController孩锡、UITableViewController等酷宵,同時(shí)還可以自定義繼承自UIViewController的ViewController;另一類是ViewController容器躬窜,UINavigationViewController和UITabBarController等忧吟,UINavigationController是以Stack的形式來(lái)存儲(chǔ)和管理ViewController,UITabBarController是以Array的形式來(lái)管理ViewController斩披。
View的加載
可以看到溜族,在Controller中創(chuàng)建View有2種方法,一種是使用Storyboard等可視化工具垦沉,另一種是通過(guò)代碼創(chuàng)建煌抒。可視化創(chuàng)建在工程中很少用到厕倍,因?yàn)樗鼭M足不了開發(fā)者如饑似渴的需求--寡壮。
代碼創(chuàng)建界面文件
1.創(chuàng)建新的Empty Application Project
2.新建ViewController的類,添加loadView方法讹弯,及viewDidLoad等方法
View Code
3.在AppDelegate.m中的application:didFinishLaunchingWithOptions:中注冊(cè)ViewController
View Code
雖然我們可以在AppDelegate.m中的application:didFinishLaunchingWithOptions:中設(shè)置window的代碼后面添加view况既,但是在一般的工程中,我們不會(huì)在委托類中管理我們的View组民。 而是利用委托類中的UIWindow去添加UIViewController棒仍,再在ViewController類中去管理View。
附臭胜,創(chuàng)建帶NavigationController的代碼
View Code
ViewController生命周期
alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc
注意viewWillUnload和viewDidUnload已經(jīng)在ios6被廢棄了莫其,因?yàn)镃learing references to views is no longer necessary。
注意1.沒(méi)有viewWillLoad耸三。
注意2.viewDidLoad和viewDidUnload并不是成對(duì)的乱陡。
啟動(dòng)程序
2014-07-28 17:43:36.124 ViewLifeCycle[4007:a0b] View Did Load
2014-07-28 17:43:36.125 ViewLifeCycle[4007:a0b] View Will Appear
2014-07-28 17:43:36.128 ViewLifeCycle[4007:a0b] View Did Appear
按下Home鍵,并沒(méi)有任何記錄
雙擊Home鍵仪壮,刪除該程序
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Will Disappear
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Did Disappear
為什么按下Home鍵之后沒(méi)有調(diào)用viewWillDisappear和viewDidDisappear呢憨颠?
因?yàn)樵趇os4后引入了后臺(tái)的概念,當(dāng)按下Home鍵之后积锅,程序被掛起了爽彤,但是該View依然是原來(lái)的View,并不是新的乏沸。所以只有內(nèi)存不夠的時(shí)候或程序被終止的時(shí)候淫茵,才會(huì)調(diào)用viewWillDisappear和viewDidDisappear。
View的卸載
loadView v.s. viewDidLoad
view的nib文件為nil時(shí)蹬跃,手工創(chuàng)建視圖界面時(shí)調(diào)用loadView匙瘪;當(dāng)view的nib文件存在的時(shí)候,初始化工作在viewDidLoad中實(shí)現(xiàn)蝶缀。
loadView時(shí)view還沒(méi)有生成丹喻,viewDidLoad時(shí),view已經(jīng)生成了翁都。loadView方法用來(lái)創(chuàng)建一個(gè)新的view碍论。loadView只會(huì)被調(diào)用一次,而viewDidLoad可能會(huì)被調(diào)用多次柄慰。
當(dāng)受到內(nèi)存警告時(shí)鳍悠,那么此時(shí)系統(tǒng)默認(rèn)操作會(huì)檢查當(dāng)前視圖控制器的view是否還在使用税娜,如果沒(méi)在使用且控制器實(shí)現(xiàn)了loadView方法,ViewController會(huì)將view release并將其指向?yàn)閚il藏研。
注意敬矩,不要在loadView中調(diào)用父類方法[super loadView],因?yàn)檫@會(huì)影響CPU性能蠢挡。
注意2弧岳,切換前后臺(tái)不會(huì)調(diào)用viewWillAppear
參考文章