回顧
Hello,通過(guò)Android程序員 如何入門(mén)iOS ——故事從這里開(kāi)始 作為一個(gè)Androider 去看iOS程序的目錄結(jié)構(gòu)應(yīng)該算有個(gè)大概的理解了,接下去我們小小介紹下和我們交道打的最多的UIViewController。
什么是ViewController
Android 開(kāi)發(fā)者們不會(huì)對(duì)activity有陌生的感覺(jué)吧?那么這里的UIViewController就可以理解成Android中的activity,UIViewController有一個(gè)不同的地方, 就是它和某一個(gè)view是強(qiáng)耦合的,在邏輯上,一個(gè)UIViewController 必然帶一個(gè)view(其實(shí)不帶view的activity好像也沒(méi)什么價(jià)值= =)。
iOS Layout System 和 Android Layout System
我們這里需要清楚明白一點(diǎn)的是,iOS不像Android,帶了一個(gè)layout system,它在不采用autolayout的情況下并不會(huì)自動(dòng)布局,Android的一個(gè)ViewGroup的生命周期經(jīng)歷3個(gè)階段,分別是
- measure
- layout
- draw
Android在大部分情況下,ViewGroup都會(huì)自動(dòng)的為它的子view撐開(kāi)足夠的空間,用以正確顯示View。這么智能的做法是在measure和layout中完成的。
iOS的繪圖性能一直完爆Android的其中一個(gè)原因就是因?yàn)樗?jiǎn)單的布局系統(tǒng)不會(huì)因?yàn)椴季值膹?fù)雜性增強(qiáng)而增加計(jì)算量。
如果不采用autolayout,那么在iOS中,所有的View有個(gè)初始化方法叫做initWithFrame: 傳入一個(gè)CGRect矩形對(duì)象,矩形定義了 (x,y,width,height),這四元 不就是我們幫系統(tǒng)完成了一次measure和layout么? 那么iOS只用盡管draw就行了。
iOS UIViewController LifeCycle
這里不提Activity LifeCycle的原因是,Activity的LifeCycle好像和View一點(diǎn)關(guān)系都沒(méi)有
onCreate-onStart-onResume-onPause-onStop-onDestory
這些和Activity本身有關(guān),似乎在哪都找不到View相關(guān)的事件回調(diào),但是在iOS的UIViewController中,卻有
viewWillAppear-viewDidAppear-viewWillDisappear-viewDidDisappear
好像每一個(gè)都和View有關(guān),不愧名字為ViewController啊~
我們從Android遷移到iOS首先寫(xiě)UIViewController的時(shí)候,一個(gè)后遺癥就是會(huì)去找ViewController的生命周期,其實(shí)不用想太多,因?yàn)閕OS充分利用了getter和setter的便利性,在我們對(duì)UIViewController.view的訪問(wèn)過(guò)程中,會(huì)調(diào)用loadView和viewDidLoad這2個(gè)回調(diào)方法,因此,我們?cè)仍?code>Activity中, setContentView之后干的事情,就可以在viewDidLoad中去做了,至于ViewController是否顯示消失,那么就在其它四個(gè)回調(diào)中去做我們想要做的事。
總結(jié)
本文我們簡(jiǎn)單介紹了UIViewController和Activity自身生命周期的不同和兩個(gè)系統(tǒng)布局系統(tǒng)的不同,希望對(duì)大家有所幫助,由于我自己也剛剛?cè)腴T(mén)iOS,寫(xiě)的文章可能漏洞較多,歡迎大家補(bǔ)充。
當(dāng)然學(xué)習(xí)建議還是 多看官方文檔