iOS視圖控制對(duì)象生命周期

iOS視圖控制對(duì)象生命周期-init菜谣、viewDidLoad珠漂、viewWillAppear、viewDidAppear尾膊、viewWillDisappear媳危、viewDidDisappear的區(qū)別及用途
init-初始化程序
viewDidLoad-加載視圖
viewWillAppear-UIViewController對(duì)象的視圖即將加入窗口時(shí)調(diào)用;
viewDidApper-UIViewController對(duì)象的視圖已經(jīng)加入到窗口時(shí)調(diào)用冈敛;
viewWillDisappear-UIViewController對(duì)象的視圖即將消失待笑、被覆蓋或是隱藏時(shí)調(diào)用;
viewDidDisappear-UIViewController對(duì)象的視圖已經(jīng)消失抓谴、被覆蓋或是隱藏時(shí)調(diào)用暮蹂;
viewVillUnload-當(dāng)內(nèi)存過(guò)低時(shí),需要釋放一些不需要使用的視圖時(shí)癌压,即將釋放時(shí)調(diào)用仰泻;
viewDidUnload-當(dāng)內(nèi)存過(guò)低,釋放一些不需要的視圖時(shí)調(diào)用滩届。

視圖控制對(duì)象通過(guò)alloc和init來(lái)創(chuàng)建我纪,但是視圖控制對(duì)象不會(huì)在創(chuàng)建的那一刻就馬上創(chuàng)建相應(yīng)的視圖,而是等到需要使用的時(shí)候才通過(guò)調(diào)用loadView來(lái)創(chuàng)建丐吓,這樣的做法能提高內(nèi)存的使用率。比如趟据,當(dāng)某個(gè)標(biāo)簽有很多UIViewController對(duì)象券犁,那么對(duì)于任何一個(gè)UIViewController對(duì)象的視圖,只有相應(yīng)的標(biāo)簽被選中時(shí)才會(huì)被創(chuàng)建出來(lái)汹碱。

比如如下代碼:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        UITabBarItem *tbi = [self tabBarItem];
        [tbi setTitle:@"CurrentTime"];
        [[self view ] setBackgroundColor:[UIColor yellowColor]];
        }
    return self;
}

我們將UIViewController的init方法中訪問(wèn)的實(shí)例變量view在init中將背景設(shè)置為黃色粘衬,運(yùn)行程序,我們能發(fā)現(xiàn)背景的確變成了黃色,但是稚新,在我們還沒(méi)有需要使用視圖的時(shí)候勘伺,該視圖已經(jīng)加載好了,在UIViewController的初始方法中訪問(wèn)實(shí)例變量view褂删,會(huì)導(dǎo)致延遲載入機(jī)制失效飞醉,這個(gè)問(wèn)題看上去不是很嚴(yán)重,但是如果考慮到內(nèi)存過(guò)低警告屯阀,那么問(wèn)題就大了缅帘。。难衰。

運(yùn)行程序钦无,選擇模擬器中的硬件->模擬內(nèi)存過(guò)低警告,我們會(huì)發(fā)現(xiàn)盖袭,原本設(shè)置的黃色背景不見(jiàn)了失暂,這是因?yàn)椋瑑?nèi)存過(guò)低鳄虱,視圖控制對(duì)象會(huì)在發(fā)出內(nèi)存過(guò)低警告時(shí)收到didReceiveMemoryWarning消息弟塞,該方法默認(rèn)實(shí)現(xiàn),檢查視圖控制對(duì)象的視圖是否可見(jiàn)醇蝴,如果不可見(jiàn)宣肚,則釋放掉,下次在加載該視圖時(shí)就不會(huì)執(zhí)行init方法悠栓,而是只執(zhí)行viewDidLoad方法霉涨,所以需要將[[selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,這樣如果視圖因?yàn)閮?nèi)存過(guò)低被釋放掉了惭适,下次需要使用到該視圖的時(shí)候笙瑟,程序會(huì)默認(rèn)取執(zhí)行該視圖的viewDidLoad方法,這樣背景顏色就又出來(lái)了癞志。

init往枷、viewDidLoad、viewWillAppear凄杯、viewDidAppear错洁、viewWillDisappear、viewDidDisappear的執(zhí)行順序:
從程序的log來(lái)看:
2012-10-19 15:51:44.811inHyron[483:b903] init
2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad
2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear
2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear
很明顯戒突,先執(zhí)行init屯碴、然后執(zhí)行viewDidLoad,然后是viewWillAppear最后是viewDidAppear膊存,這樣視圖就創(chuàng)建好了导而,當(dāng)視圖消失或者被覆蓋的時(shí)候:
2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear
2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear
這樣一來(lái)視圖就消失了忱叭,當(dāng)模擬內(nèi)存警告的時(shí)候:
2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.
2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload
2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload
從log可以看出,當(dāng)視圖控制對(duì)象收到內(nèi)存警告的時(shí)候今艺,程序會(huì)執(zhí)行viewWillUnload最后是執(zhí)行viewDidUnload韵丑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市虚缎,隨后出現(xiàn)的幾起案子撵彻,更是在濱河造成了極大的恐慌,老刑警劉巖遥巴,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件千康,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铲掐,警方通過(guò)查閱死者的電腦和手機(jī)拾弃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)摆霉,“玉大人豪椿,你說(shuō)我怎么就攤上這事⌒埃” “怎么了搭盾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)婉支。 經(jīng)常有香客問(wèn)我鸯隅,道長(zhǎng),這世上最難降的妖魔是什么向挖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任蝌以,我火速辦了婚禮,結(jié)果婚禮上何之,老公的妹妹穿的比我還像新娘跟畅。我一直安慰自己,他們只是感情好溶推,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布徊件。 她就那樣靜靜地躺著,像睡著了一般蒜危。 火紅的嫁衣襯著肌膚如雪虱痕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天辐赞,我揣著相機(jī)與錄音皆疹,去河邊找鬼。 笑死占拍,一個(gè)胖子當(dāng)著我的面吹牛略就,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晃酒,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼表牢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贝次?” 一聲冷哼從身側(cè)響起崔兴,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛔翅,沒(méi)想到半個(gè)月后敲茄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡山析,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年堰燎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笋轨。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秆剪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爵政,到底是詐尸還是另有隱情仅讽,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布钾挟,位于F島的核電站洁灵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掺出。R本人自食惡果不足惜徽千,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛛砰。 院中可真熱鬧罐栈,春花似錦、人聲如沸泥畅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)位仁。三九已至柑贞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聂抢,已是汗流浹背钧嘶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琳疏,地道東北人有决。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓闸拿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親书幕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子新荤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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