loadView與ViewDidLoad

? ? ?以下的方法作為每為ios開發(fā)工作者,肯定很熟悉,但有時(shí)又容易混淆,我對(duì)這些方法做了歸納總結(jié),有一部分是從網(wǎng)上找的,感覺不錯(cuò)就記下了.

一、loadView

永遠(yuǎn)不要主動(dòng)調(diào)用這個(gè)函數(shù)芥挣。view controller會(huì)在view的property被請(qǐng)求并且當(dāng)前view值為nil時(shí)調(diào)用這個(gè)函數(shù)。如果你手動(dòng)創(chuàng)建view剂碴,你應(yīng)該重載這個(gè)函數(shù),且不要在重載的時(shí)候調(diào)用[super loadview]虹茶。如果你用IB創(chuàng)建view并初始化view

controller,那就意味著你使用initWithNibName:bundle:方法朱灿,這時(shí)续扔,你不應(yīng)該重載loadView函數(shù)攻臀。

這個(gè)方法系統(tǒng)的默認(rèn)實(shí)現(xiàn)是這樣:

1;尋找有關(guān)可用的nib文件的信息,根據(jù)這個(gè)信息來加載nib文件//所以纱昧,nib的加載過程是在loadview中完成的哦刨啸。

2;如果沒有有關(guān)nib文件的信息,默認(rèn)創(chuàng)建一個(gè)空白的UIView對(duì)象识脆,然后把對(duì)象成賦值給viewcontroller的主view设联。

所以,如果你決定重載這個(gè)函數(shù)時(shí)灼捂,你也應(yīng)該完成這些步驟:

把子類的view賦給view屬性(property)(你create的view必須是唯一的實(shí)例离例,并且不被其他任何controller共享),而且你重載的這個(gè)函數(shù)不應(yīng)該調(diào)用super悉稠,這個(gè)也是為了保持主view與controller的單一映射關(guān)系宫蛆。

二、viewDidLoad

這個(gè)函數(shù)在controller加載了相關(guān)的views后被調(diào)用的猛,而不論這些views存儲(chǔ)在nib文件里還是在loadView函數(shù)中生成耀盗。

這個(gè)函數(shù)的作用主要是讓你可以進(jìn)一步的初始化你的views。viewDidLoad通常負(fù)責(zé)的是view及其子view被加載進(jìn)內(nèi)存之后的數(shù)據(jù)初始化的工作卦尊,即視圖的數(shù)據(jù)部分的初始化叛拷。在iOS 3.0以及更高版本中,你應(yīng)該重載viewDidUnload函數(shù)來釋放任何對(duì)view的引用或者它里面的內(nèi)容(子view等等)岂却。

其多數(shù)情況下是做nib文件的后續(xù)工作忿薇。

三、viewDidUnload

這個(gè)函數(shù)是viewDidLoad的對(duì)立函數(shù)淌友。在程序內(nèi)存欠缺時(shí)煌恢,這個(gè)函數(shù)被controller調(diào)用骇陈,來釋放它的view以及view相關(guān)的對(duì)象震庭。由于controller通常保存著view以及相關(guān)object的引用,所以你必須使用這個(gè)函數(shù)來放棄這些對(duì)象的所有權(quán)以便內(nèi)存回收你雌。但不要釋放那些難以重建的數(shù)據(jù)器联。

通常controller會(huì)保存nib文件建立的views的引用二汛,但是也可能會(huì)保存著loadView函數(shù)創(chuàng)建的對(duì)象的引用。最完美的方法是使用合成器方法:

1

self.myCertainView

2

=

nil;

這樣合成器會(huì)release這個(gè)view拨拓,如果你沒有使用property肴颊,那么你得自己顯式釋放這個(gè)view。

四渣磷、結(jié)論

所以流程應(yīng)該是這樣:

loadView來加載view(無論nib文件或自定義的views)到內(nèi)存——>viewDidLoad函數(shù)進(jìn)一步初始化這些view(通常是側(cè)重于數(shù)據(jù)data的初始化)——>內(nèi)存不足時(shí)婿着,調(diào)用viewDidUnload函數(shù)釋放views

—->當(dāng)需要使用view時(shí)又回到第一步

如此循環(huán)

需要厘清兩個(gè)概念,創(chuàng)建一個(gè)類和實(shí)例化一個(gè)類.在XCode中創(chuàng)建一個(gè)類和實(shí)例化一個(gè)類很容易區(qū)分,但是在IB(Interface Builder)中有時(shí)候就會(huì)迷糊.其實(shí)也很好區(qū)分,孤零零地創(chuàng)建了一個(gè)nib文件,沒有和其他可被實(shí)例化的類有直接或間接關(guān)系的時(shí)候,這個(gè)類或這些類(一個(gè)nib文件也可能包含多個(gè)類)是沒有機(jī)會(huì)被實(shí)例化的,所以這種情況只是通過ib創(chuàng)建了一個(gè)類,而沒有實(shí)例化.真正的實(shí)例化還需要通過在Xcode用代碼來讀取這個(gè)nib文件.知道這兩這的區(qū)別后這些方法也就容易辨認(rèn)多了

viewDidLoad其實(shí)沒什么可混淆的,無論通過什么途徑加載(Xcode或者IB,這里的加載屬于實(shí)例化)完view后肯定會(huì)執(zhí)行這個(gè)方法.

loadView需要分兩種情況.當(dāng)你通過Xcode實(shí)例化一個(gè)類的時(shí)候就需要自己在controller中實(shí)現(xiàn)這個(gè)方法.而在IB中實(shí)例化就不需要實(shí)現(xiàn)它.

initWithNibName這個(gè)方法是在controller的類在IB中創(chuàng)建,但是通過Xcode實(shí)例化controller的時(shí)候用的.

initWithCoder是一個(gè)類在IB中創(chuàng)建但在xocdde中被實(shí)例化時(shí)被調(diào)用的.比如,通過IB創(chuàng)建一個(gè)controller的nib文件,然后在xcode中通過initWithNibName來實(shí)例化這個(gè)controller,那么這個(gè)controller的initWithCoder會(huì)被調(diào)用.

awakeFromNib

當(dāng).nib文件被加載的時(shí)候,會(huì)發(fā)送一個(gè)awakeFromNib的消息到.nib文件中的每個(gè)對(duì)象醋界,每個(gè)對(duì)象都可以定義自己的awakeFromNib函數(shù)來響應(yīng)這個(gè)消息竟宋,執(zhí)行一些必要的操作。也就是說通過nib文件創(chuàng)建view對(duì)象時(shí)執(zhí)行awakeFromNib

viewDidLoad

當(dāng)view對(duì)象被加載到內(nèi)存后就會(huì)執(zhí)行viewDidLoad形纺,所以不管通過nib文件還是代碼的方式創(chuàng)建對(duì)象都會(huì)執(zhí)行viewDidLoad丘侠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逐样,隨后出現(xiàn)的幾起案子蜗字,更是在濱河造成了極大的恐慌,老刑警劉巖脂新,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挪捕,死亡現(xiàn)場離奇詭異,居然都是意外死亡争便,警方通過查閱死者的電腦和手機(jī)担神,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始花,“玉大人妄讯,你說我怎么就攤上這事】嵯” “怎么了亥贸?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浇垦。 經(jīng)常有香客問我炕置,道長,這世上最難降的妖魔是什么男韧? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任朴摊,我火速辦了婚禮,結(jié)果婚禮上此虑,老公的妹妹穿的比我還像新娘甚纲。我一直安慰自己,他們只是感情好朦前,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布介杆。 她就那樣靜靜地躺著鹃操,像睡著了一般。 火紅的嫁衣襯著肌膚如雪春哨。 梳的紋絲不亂的頭發(fā)上荆隘,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音赴背,去河邊找鬼椰拒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凰荚,可吹牛的內(nèi)容都是我干的耸三。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浇揩,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼仪壮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胳徽,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤积锅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后养盗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缚陷,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年往核,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箫爷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡聂儒,死狀恐怖虎锚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衩婚,我是刑警寧澤窜护,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站非春,受9級(jí)特大地震影響柱徙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奇昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一护侮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧储耐,春花似錦羊初、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽业踏。三九已至禽炬,卻和暖如春涧卵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腹尖。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工柳恐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人热幔。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓乐设,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绎巨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子近尚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • 27、ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的场勤?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 580評(píng)論 0 1
  • 37.cocoa內(nèi)存管理規(guī)則 1)當(dāng)你使用new戈锻,alloc或copy方法創(chuàng)建一個(gè)對(duì)象時(shí),該對(duì)象的保留計(jì)數(shù)器值為1...
    如風(fēng)家的秘密閱讀 847評(píng)論 0 4
  • 每個(gè)ios開發(fā)者對(duì)loadView和viewDidLoad肯定都很熟悉,雖然這兩個(gè)函數(shù)使用上真的是非常簡單,但是和...
    LuckTime閱讀 1,464評(píng)論 0 0
  • 前言: 這部分內(nèi)容和媳,對(duì)于大部分人來說使用起來可能已經(jīng)非常熟練格遭,但是涉及到的細(xì)節(jié)還是挺多的,對(duì)于新開發(fā)者可能不是...
    饒鵬偉閱讀 968評(píng)論 1 5
  • 7留瞳、不使用IB是拒迅,下面這樣做有什么問題? 6她倘、請(qǐng)說說Layer和View的關(guān)系璧微,以及你是如何使用它們的。 1.首先...
    AlanGe閱讀 674評(píng)論 0 1