9.UIViewController的生命周期

應用程序的生命周期: http://www.cocoachina.com/ios/20150623/12244.html
Target-Action 機制: http://www.cocoachina.com/ios/20160111/14932.html

Not running:app還沒運行
Inactive:app運行在foreground但沒有接收事件
Active:app運行在foreground和正在接收事件
Background:運行在background和正在執(zhí)行代碼
Suspended:運行在background但沒有執(zhí)行代碼

大多數(shù)發(fā)生狀態(tài)轉(zhuǎn)換時都會調(diào)用delegate對象對應的方法來響應app的狀態(tài)改變察署。下面匯總了delegate對象的所有方法葛账,當app狀態(tài)發(fā)生轉(zhuǎn)換時,你可能會使用到它們。

application:willFinishLaunchingWithOptions: - 這個方法是你在啟動時的第一次機會來執(zhí)行代碼
application:didFinishLaunchingWithOptions: - 這個方法允許你在顯示app給用戶之前執(zhí)行最后的初始化操作
applicationDidBecomeActive: - app已經(jīng)切換到active狀態(tài)后需要執(zhí)行的操作
applicationWillResignActive: - app將要從前臺切換到后臺時需要執(zhí)行的操作
applicationDidEnterBackground: - app已經(jīng)進入后臺后需要執(zhí)行的操作
applicationWillEnterForeground: - app將要從后臺切換到前臺需要執(zhí)行的操作梅尤,但app還不是active狀態(tài)
applicationWillTerminate: - app將要結(jié)束時需要執(zhí)行的操作

ViewController的生命周期:http://blog.csdn.net/xyz_lmn/article/details/9022399

ViewController是iOS應用程序中重要的部分蛉迹,是應用程序數(shù)據(jù)和視圖之間的重要橋梁稠诲,ViewController管理應用中的眾多視圖舵匾。

iOS的SDK中提供很多原生ViewController,以支持標準的用戶界面册赛,例如表視圖控制器(UITableViewController)钠导、導航控制器(UINavigationController)震嫉、標簽欄控制器(UITabbarController)和iPad專有的UISplitViewController等。

按結(jié)構(gòu)可以對iOS的所有ViewController分成兩類:

屏幕快照 2017-05-26 12.23.33.png

1牡属、主要用于展示內(nèi)容的ViewController票堵,這種ViewController主要用于為用戶展示內(nèi)容,并與用戶交互逮栅,如UITableViewController悴势,UIViewController。

2证芭、用于控制和顯示其他ViewController的ViewController瞳浦。這種ViewController一般都是一個ViewController的容器担映。如UINavigationController废士,UITabbarController。
它們都有一個屬性:viewControllers蝇完。其中UINavigationController表示一種Stack式結(jié)構(gòu)官硝,push一個ViewController或pop一次,因此后一個ViewController一般會依賴前一個ViewController短蜕。而UITabbarController表示一個Array結(jié)構(gòu)氢架,各個ViewController是并列的。

ViewController的生命周期

  ViewController生命周期會經(jīng)歷初始化朋魔、加載視圖岖研、銷毀視圖、生命結(jié)束等過程警检。

1.通過alloc init 分配內(nèi)存,初始化controller.

2.loadView
loadView方法默認實現(xiàn)[super loadView]
如果在初始化controller時指定了xib文件名,就會根據(jù)傳入的xib文件名加載對應的xib文件,如果沒傳xib文件名,默認會加載跟controller同名的xib文件,如果沒找到相關(guān)聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView,然后賦給controller的view

3.viewDidLoad
當loadView創(chuàng)建完view之后孙援,此時view已經(jīng)完成加載了,會調(diào)用viewDidLoad方法扇雕;一般我會在這里做界面上的初始化操作拓售,比如添加按鈕,子視圖,等等.

4.viewWillAppear
當view在load完之后,將要顯示在屏幕之前會調(diào)用這個方法
在重寫這些方法時候最好先調(diào)用一下系統(tǒng)的方法之后在做操作。

5.viewDidAppear
當view已經(jīng)在屏幕上顯示出來之后,會調(diào)用這個方法
當一個視圖被移除屏幕并且銷毀的時候
6.viewWillDisappear
當視圖將要從屏幕上移除時候調(diào)用

7.viewDidDisappear
當視圖已經(jīng)從屏幕上移除時候調(diào)用

8.dealloc
view被銷毀時候調(diào)用镶奉,如果是手動管理內(nèi)存的話础淤,需要釋放掉之前在init和viewDidLoad中分配的內(nèi)存(類似alloc,new,copy);dealloc方法不能由我們主動調(diào)用,必須等引用計數(shù)為0時候由系統(tǒng)調(diào)用.

注意:viewDidUnload 在6.0之后已經(jīng)廢棄了哨苛。簡單來說鸽凶,對于iOS6,你不需要做任何以前viewDidUnload的事情建峭,更不需要把以前viewDidUnload的代碼移動到 didReceiveMemoryWarning方法中

屏幕快照 2017-05-26 11.09.29.png

ViewController加載view過程玻侥,見下圖(loadView)

20130621105945796-2.png

ViewController卸載View過程見(unLoadView)


20130621105956156.png

當一個視圖控制器被創(chuàng)建,并在屏幕上顯示的時候迹缀。 代碼的執(zhí)行順序
1使碾、 alloc 創(chuàng)建對象蜜徽,分配空間
2、init (initWithNibName) 初始化對象票摇,初始化數(shù)據(jù)
3拘鞋、loadView 從nib載入視圖 ,通常這一步不需要去干涉矢门。除非你沒有使用xib文件創(chuàng)建視圖
4盆色、viewDidLoad 載入完成,可以進行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件
5祟剔、viewWillAppear 視圖將出現(xiàn)在屏幕之前隔躲,馬上這個視圖就會被展現(xiàn)在屏幕上了
6、viewDidAppear 視圖已在屏幕上渲染完成

當一個視圖被移除屏幕并且銷毀的時候的執(zhí)行順序物延,這個順序差不多和上面的相反
1宣旱、viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行
2、viewDidDisappear 視圖已經(jīng)被從屏幕上移除叛薯,用戶看不到這個視圖了
3浑吟、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進行釋放

關(guān)于viewDidUnload :在發(fā)生內(nèi)存警告的時候如果本視圖不是當前屏幕上正在顯示的視圖的話耗溜, viewDidUnload將會被執(zhí)行组力,本視圖的所有子視圖將被銷毀,以釋放內(nèi)存,此時開發(fā)者需要手動對viewLoad抖拴、viewDidLoad中創(chuàng)建的對象釋放內(nèi)存燎字。 因為當這個視圖再次顯示在屏幕上的時候,viewLoad阿宅、viewDidLoad 再次被調(diào)用候衍,以便再次構(gòu)造視圖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末家夺,一起剝皮案震驚了整個濱河市脱柱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拉馋,老刑警劉巖榨为,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煌茴,居然都是意外死亡随闺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門蔓腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矩乐,“玉大人,你說我怎么就攤上這事∩⒑保” “怎么了分歇?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欧漱。 經(jīng)常有香客問我职抡,道長,這世上最難降的妖魔是什么误甚? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任缚甩,我火速辦了婚禮,結(jié)果婚禮上窑邦,老公的妹妹穿的比我還像新娘擅威。我一直安慰自己,他們只是感情好冈钦,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布郊丛。 她就那樣靜靜地躺著,像睡著了一般派继。 火紅的嫁衣襯著肌膚如雪宾袜。 梳的紋絲不亂的頭發(fā)上捻艳,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天驾窟,我揣著相機與錄音,去河邊找鬼认轨。 笑死绅络,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嘁字。 我是一名探鬼主播恩急,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纪蜒!你這毒婦竟也來了衷恭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纯续,失蹤者是張志新(化名)和其女友劉穎随珠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猬错,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡窗看,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倦炒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片显沈。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拉讯,到底是詐尸還是另有隱情涤浇,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布魔慷,位于F島的核電站芙代,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盖彭。R本人自食惡果不足惜纹烹,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望召边。 院中可真熱鬧铺呵,春花似錦、人聲如沸隧熙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贞盯。三九已至音念,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躏敢,已是汗流浹背闷愤。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留件余,地道東北人讥脐。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像啼器,于是被迫代替她去往敵國和親旬渠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

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