Android 程序員學(xué)習(xí) iOS ——UIViewController 和 Layout System

回顧

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í)不帶viewactivity好像也沒(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è)階段,分別是

  1. measure
  2. layout
  3. draw

Android在大部分情況下,ViewGroup都會(huì)自動(dòng)的為它的子view撐開(kāi)足夠的空間,用以正確顯示View。這么智能的做法是在measurelayout中完成的。

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)完成了一次measurelayout么? 那么iOS只用盡管draw就行了。

iOS UIViewController LifeCycle

這里不提Activity LifeCycle的原因是,ActivityLifeCycle好像和View一點(diǎn)關(guān)系都沒(méi)有

onCreate - onStart - onResume - onPause - onStop - onDestory
這些和Activity本身有關(guān),似乎在哪都找不到View相關(guān)的事件回調(diào),但是在iOSUIViewController中,卻有
viewWillAppear - viewDidAppear - viewWillDisappear - viewDidDisappear
好像每一個(gè)都和View有關(guān),不愧名字為ViewController啊~

我們從Android遷移到iOS首先寫(xiě)UIViewController的時(shí)候,一個(gè)后遺癥就是會(huì)去找ViewController的生命周期,其實(shí)不用想太多,因?yàn)閕OS充分利用了gettersetter的便利性,在我們對(duì)UIViewController.view的訪問(wèn)過(guò)程中,會(huì)調(diào)用loadViewviewDidLoad這2個(gè)回調(diào)方法,因此,我們?cè)仍?code>Activity中, setContentView之后干的事情,就可以在viewDidLoad中去做了,至于ViewController是否顯示消失,那么就在其它四個(gè)回調(diào)中去做我們想要做的事。

參考官方文檔:https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UIViewController_Class/

總結(jié)

本文我們簡(jiǎn)單介紹了UIViewControllerActivity自身生命周期的不同和兩個(gè)系統(tǒng)布局系統(tǒng)的不同,希望對(duì)大家有所幫助,由于我自己也剛剛?cè)腴T(mén)iOS,寫(xiě)的文章可能漏洞較多,歡迎大家補(bǔ)充。

當(dāng)然學(xué)習(xí)建議還是 多看官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評(píng)論 25 709
  • afinalAfinal是一個(gè)android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,876評(píng)論 2 45
  • 我曾無(wú)數(shù)次地到達(dá)過(guò)這里,我曾無(wú)數(shù)次地出現(xiàn)在這里的街頭。一個(gè)人,在夜里。 樹(shù)、燈光、拱橋、流水、雕梁畫(huà)壁。在黑夜中,...
    枝樓閱讀 770評(píng)論 0 3
  • 我不知道我還要等多久。我無(wú)數(shù)遍的對(duì)自己說(shuō)不要在等了,可是我的青春,我抓不住的時(shí)光,我下的每一個(gè)決定……無(wú)不在等著,...
    何伊君閱讀 321評(píng)論 0 0
  • 今年花了不少時(shí)間在讀詩(shī),當(dāng)我讀了幾本詩(shī)理,詩(shī)史書(shū)后,頗有些沾沾自喜,然后沉浸在自滿(mǎn)的喜悅中。甚至得意洋洋地寫(xiě)了一篇...
    劉小麥同學(xué)閱讀 494評(píng)論 0 1

友情鏈接更多精彩內(nèi)容