View的生命周期
main函數(shù)
程序的入口main函數(shù)
/* UIApplicationMain底層實現(xiàn)
1.根據(jù)principalClassName提供類名創(chuàng)建UIApplication對象
2.創(chuàng)建UIApplicationDelegate對象液兽,并且成為UIApplication對象代理,app.delete = delegate
3.開啟一個主運行循環(huán)沮榜,處理事件,可以保持程序一直運行蠕趁。
4.加載info.plist碱妆,并且判斷有木有指定main.storyboard,如果指定,就會去加載
*/
UIWindow
UIWindow是一種特殊的View
1.iOS啟動完畢后,創(chuàng)建的第一個視圖控件就是UIWindow国拇。
2.接著創(chuàng)建控制器的View洛史,
3.然后將控制器的view添加到UIWindow上
4.于是控制器的View就顯示在屏幕上了。
5.也就是說沒有UIWindow贝奇,就沒有UI界面
程序啟動原理:
執(zhí)行main
執(zhí)行UIAPPLICATIONMain
1.創(chuàng)建UIApplication
2.創(chuàng)建UIApplicationDelegate,并且成為UIApplication的代理
3.開啟一個主運行循環(huán)
4.加載info.plist,判斷有沒有指定main.storyboard虹菲,指定了就加載
加載main.storyboard
1.創(chuàng)建窗口
2.加載main.storyboard,并且加載main.storyboard指定的控制器
3.把新創(chuàng)建的控制器掉瞳,作為窗口的根控制器,讓窗口顯示出來
1浪漠、手動創(chuàng)建窗口步驟
1.自己加載程序啟動-刪掉main
2. 在 AppDelegate
舉例:如果需要看到鍵盤陕习,必須把鍵盤添加到一個View上面去
首先了解什么是窗口:鍵盤、狀態(tài)欄是窗口
窗口層級關(guān)系:
// 窗口是有層級關(guān)系
// UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
2址愿、控制器的創(chuàng)建(storyboard)
1.不通過系統(tǒng)創(chuàng)建:
- // instantiateInitialViewController:加載箭頭指向的控制器
3.根據(jù)標識來加載:
3该镣、控制器的創(chuàng)建(Xid)
/* 通過xib創(chuàng)建控制器的view
1.一定要描述xib的文件擁有者是控制器,也就是說這個xib是用來描述控制器
*/
1.通過File`s Owner 更改它的描述類型是控制器
2.修改Xib描述為控制器的類型后响谓,就可以連線了损合。
3.通過Xib 要是用控制器alloc】 initWithNibName:bundle:】 bundle傳nil默認就是從[NSBundle mainBundle]
LoadView
首先自己去創(chuàng)建跟控制器
在AppDelegate中加載:
這里創(chuàng)建出來是箭頭指向的控制器的View
但是:通過 loadView方法后
系統(tǒng)就不會去加載storyboard描述的控制器的View
總結(jié):
loadView作用:自定義控制器的view
loadView什么時候調(diào)用:第一次使用控制器的view的時候調(diào)用
注意:在這個方法中如果沒有自定義view,就不能獲取控制器的view
// 一旦重寫了這個方法,就不要調(diào)用[super loadView]
// 如果重寫了這個方法娘纷,就不會去加載storyboard描述的控制器的View
// LoadView 默認就可以加載storyboard和Xib描述的控制器的View
控制器View的創(chuàng)建(XIB)-尋找控制器的XIb
如果在控制器中實現(xiàn)這個方法:
// 加載跟類名相同的xib
// 如果描述控制器View的xib跟控制器的類名相同嫁审,就會去加載
// 只有控制器的init方法底層會調(diào)用initWithNibName:bundle:
// 只要通過initWithNibName:bundle:初始化控制器,并且nibName為nil,就會執(zhí)行以下幾步。
// 1.尋找有沒有跟控制器類名同名但是不帶Controller的xib赖晶,如果有就會去加載(View.xib)
// 2.尋找有沒有跟控制器類名同名的xib律适,如果有就會去加載(ViewController.xib)
// 3.如果都沒有找到,創(chuàng)建空的view遏插,
通過XIB創(chuàng)建控制器View的一覽表:
控制器View的顏色
設(shè)置控制器的View = vc.view.alpha = 0;
那么在Windows上添加的按鈕可以點擊捂贿,
如果設(shè)置控制器的View的顏色為透明色,但是系統(tǒng)認為只是幾乎透明胳嘲,不可以點擊button
控制器View的懶加載 -(void)ViewDidLoad
控制器的View創(chuàng)建默認就是透明的厂僧,看不到也穿不透
我們創(chuàng)建控制器的時候,控制器的View并沒有創(chuàng)建
因為你要使用它了牛,所以這一行就會加載
雖然下面設(shè)置了控制器的顏色颜屠,但是上面的設(shè)置顏色階段就已經(jīng)顯示了控制器
相當(dāng)于:我已經(jīng)加載過ViewDidLoad后,才能設(shè)置顏色白魂,所以上面的View的藍色并不會顯示
即便加載loadView汽纤,也不會改變它的顏色,因為最終要調(diào)用ViewDidLoad福荸,顏色還是最開始的紅色
也就是self.window.rootViewController = ViewController,就不必設(shè)置尺寸