iOS開發(fā)--UIWindow與程序啟動原理與兩種創(chuàng)建控制器的方法

View的生命周期

Paste_Image.png

main函數(shù)
程序的入口main函數(shù)

Paste_Image.png
/* 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,如果指定,就會去加載
*/
Paste_Image.png

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
Paste_Image.png
2. 在 AppDelegate
Paste_Image.png

舉例:如果需要看到鍵盤陕习,必須把鍵盤添加到一個View上面去

首先了解什么是窗口:鍵盤、狀態(tài)欄是窗口
窗口層級關(guān)系:
// 窗口是有層級關(guān)系
// UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
Paste_Image.png

2址愿、控制器的創(chuàng)建(storyboard)

1.不通過系統(tǒng)創(chuàng)建:

Paste_Image.png
  1. // instantiateInitialViewController:加載箭頭指向的控制器
Paste_Image.png

3.根據(jù)標識來加載:

Paste_Image.png
Paste_Image.png

3该镣、控制器的創(chuàng)建(Xid)

/* 通過xib創(chuàng)建控制器的view
 1.一定要描述xib的文件擁有者是控制器,也就是說這個xib是用來描述控制器
 */

1.通過File`s Owner 更改它的描述類型是控制器

Paste_Image.png

2.修改Xib描述為控制器的類型后响谓,就可以連線了损合。

Paste_Image.png

3.通過Xib 要是用控制器alloc】 initWithNibName:bundle:】 bundle傳nil默認就是從[NSBundle mainBundle]

Paste_Image.png

LoadView

首先自己去創(chuàng)建跟控制器

Paste_Image.png

在AppDelegate中加載:

Paste_Image.png

這里創(chuàng)建出來是箭頭指向的控制器的View

Paste_Image.png

但是:通過 loadView方法后
系統(tǒng)就不會去加載storyboard描述的控制器的View

Paste_Image.png

總結(jié):

loadView作用:自定義控制器的view
loadView什么時候調(diào)用:第一次使用控制器的view的時候調(diào)用
注意:在這個方法中如果沒有自定義view,就不能獲取控制器的view
// 一旦重寫了這個方法,就不要調(diào)用[super loadView]

// 如果重寫了這個方法娘纷,就不會去加載storyboard描述的控制器的View
// LoadView 默認就可以加載storyboard和Xib描述的控制器的View

Paste_Image.png

控制器View的創(chuàng)建(XIB)-尋找控制器的XIb

Paste_Image.png

如果在控制器中實現(xiàn)這個方法:

Paste_Image.png

// 加載跟類名相同的xib
// 如果描述控制器View的xib跟控制器的類名相同嫁审,就會去加載

Paste_Image.png

// 只有控制器的init方法底層會調(diào)用initWithNibName:bundle:

Paste_Image.png

// 只要通過initWithNibName:bundle:初始化控制器,并且nibName為nil,就會執(zhí)行以下幾步。
// 1.尋找有沒有跟控制器類名同名但是不帶Controller的xib赖晶,如果有就會去加載(View.xib)
// 2.尋找有沒有跟控制器類名同名的xib律适,如果有就會去加載(ViewController.xib)
// 3.如果都沒有找到,創(chuàng)建空的view遏插,

通過XIB創(chuàng)建控制器View的一覽表:

Paste_Image.png

控制器View的顏色

Paste_Image.png

設(shè)置控制器的View = vc.view.alpha = 0;
那么在Windows上添加的按鈕可以點擊捂贿,
如果設(shè)置控制器的View的顏色為透明色,但是系統(tǒng)認為只是幾乎透明胳嘲,不可以點擊button

控制器View的懶加載 -(void)ViewDidLoad

控制器的View創(chuàng)建默認就是透明的厂僧,看不到也穿不透
我們創(chuàng)建控制器的時候,控制器的View并沒有創(chuàng)建

Paste_Image.png

因為你要使用它了牛,所以這一行就會加載


Paste_Image.png

雖然下面設(shè)置了控制器的顏色颜屠,但是上面的設(shè)置顏色階段就已經(jīng)顯示了控制器

Paste_Image.png

相當(dāng)于:我已經(jīng)加載過ViewDidLoad后,才能設(shè)置顏色白魂,所以上面的View的藍色并不會顯示

Paste_Image.png

即便加載loadView汽纤,也不會改變它的顏色,因為最終要調(diào)用ViewDidLoad福荸,顏色還是最開始的紅色

Paste_Image.png

也就是self.window.rootViewController = ViewController,就不必設(shè)置尺寸

開發(fā)注意:不要再ViewDidLoad中打印尺寸蕴坪,在ViewDidAppear中打印尺寸

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子背传,更是在濱河造成了極大的恐慌呆瞻,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件径玖,死亡現(xiàn)場離奇詭異痴脾,居然都是意外死亡,警方通過查閱死者的電腦和手機梳星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門赞赖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冤灾,你說我怎么就攤上這事前域。” “怎么了韵吨?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵匿垄,是天一觀的道長。 經(jīng)常有香客問我归粉,道長椿疗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任糠悼,我火速辦了婚禮届榄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绢掰。我一直安慰自己痒蓬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布滴劲。 她就那樣靜靜地躺著攻晒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪班挖。 梳的紋絲不亂的頭發(fā)上鲁捏,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音萧芙,去河邊找鬼给梅。 笑死,一個胖子當(dāng)著我的面吹牛双揪,可吹牛的內(nèi)容都是我干的动羽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼渔期,長吁一口氣:“原來是場噩夢啊……” “哼运吓!你這毒婦竟也來了渴邦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤拘哨,失蹤者是張志新(化名)和其女友劉穎谋梭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倦青,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瓮床,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了产镐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隘庄。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖磷账,靈堂內(nèi)的尸體忽然破棺而出峭沦,到底是詐尸還是另有隱情,我是刑警寧澤逃糟,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站蓬豁,受9級特大地震影響绰咽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜地粪,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一取募、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟆技,春花似錦玩敏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眶蕉,卻和暖如春砰粹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背造挽。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工碱璃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饭入。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓嵌器,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谐丢。 傳聞我的和親對象是個殘疾皇子爽航,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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