UIViewController中
loadView (當訪問UIViewController的view屬性時)
viewDidLoad (加載視圖時調(diào)用)
viewWillAppear (視圖即將可見時調(diào)用)
viewDidAppear (視圖即將加入窗口時調(diào)用)
viewWillLayoutSubviews (視圖布局改變時調(diào)用庭呜,如:屏幕旋轉)
viewDidLayoutSubviews 在以下情況下會被調(diào)用:
1肩碟、init初始化不會觸發(fā)layoutSubviews
2较店、addSubview會觸發(fā)layoutSubviews
3、設置view的Frame會觸發(fā)layoutSubviews茄袖,當然前提是frame的值設置前后發(fā)生了變化
4渺贤、滾動一個UIScrollView會觸發(fā)layoutSubviews
5雏胃、旋轉Screen會觸發(fā)父UIView上的layoutSubviews事件
6、改變一個UIView大小的時候也會觸發(fā)父UIView上的layoutSubviews事件
viewWillDisappear(視圖將被從屏幕上移除之前調(diào)用)
viewDidDisappear ( 視圖已經(jīng)被從屏幕上移除志鞍,用戶看不到這個視圖了調(diào)用)
當一個視圖控制器被創(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)建的對象進行釋放
didReceiveMemoryWarning 收到系統(tǒng)傳來的內(nèi)存警告通知后會執(zhí)行的方法
shouldAutorotateToInterfaceOrientation 是否支持不同方向的旋轉視圖
willAnimateRotationToInterfaceOrientation 在進行旋轉視圖前的會執(zhí)行的方法(用于調(diào)整旋轉視圖之用)
按照調(diào)用順序說明如下:
initWithNibName:bundle:
初始化UIViewController,執(zhí)行關鍵數(shù)據(jù)初始化操作墨吓,注意這里不要做view相關操作球匕,view在loadView方法中才
初始化,這時loadView還未調(diào)用帖烘。如果使用StoryBoard進行視圖管理亮曹,程序不會直接初始化一個
UIViewController,StoryBoard會自動初始化或在segue被觸發(fā)時自動初始化秘症,因此方法
initWithNibName:bundle:不會被調(diào)用乾忱。如果在代碼里面使用instantiateViewControllerWithIdentifier:方法顯示初
始化一個UIViewController,則initWithCoder方法會被調(diào)用历极。
如果是通過調(diào)用initWithNibName:bundle指定nib文件名初始化的話,ViewController會根據(jù)此nib來創(chuàng)建View衷佃。如果name參數(shù)為nil趟卸,則ViewController會通過以下兩個步驟找到與其關聯(lián)的nib: 1)如果ViewController的類名以“Controller”結尾,例如ViewController的類名是MyViewController氏义,則查找是否存在MyView.nib锄列; 2)找跟ViewController類名一樣的文件,例如MyViewController惯悠,則查找是否存在MyViewController.nib
loadView
當訪問UIViewController的view屬性時邻邮,view如果此時是nil,那么VC會自動調(diào)用loadView方法來初始化一個
UIView并賦值給view屬性克婶。此方法用在初始化關鍵view筒严,需要注意的是丹泉,在view初始化之前,不能先調(diào)用view
的getter方法鸭蛙,否則將導致死循環(huán)(除非先調(diào)用了[supper loadView];)
如果沒有重載loadView方法摹恨,則UIViewController會從nib或StoryBoard中查找默認的loadView,默認的loadView會返回一個空白的UIView對象娶视。
viewDidLoad
當VC的view對象載入內(nèi)存后調(diào)用晒哄,用于對view進行額外的初始化操作
viewWillAppear
在view即將添加到視圖層級中(顯示給用戶)且任意顯示動畫切換之前調(diào)用(這個時候supperView還是nil)。這個方
法中完成任何與視圖顯示相關的任務肪获,例如改變視圖方向寝凌、狀態(tài)欄方向、視圖顯示樣式等
viewDidAppear
在view被添加到視圖層級中孝赫,顯示動畫切換之后調(diào)用(這時view已經(jīng)添加到supperView中)较木。在這個方法中執(zhí)行
視圖顯示相關附件任務,如果重載了這個方法寒锚,必須在方法中調(diào)用[supper viewDidAppear];
viewWillLayoutSubviews
view即將布局其Subviews劫映。比如view的bounds改變了(例如狀態(tài)欄從不顯示到顯示,視圖方向變化)刹前,要調(diào)整
Subviews的位置泳赋,在調(diào)整之前要做的一些工作就可以在該方法中實現(xiàn)。
viewDidLayoutSubviews
view已經(jīng)布局其Subviews喇喉。比如view的bounds改變了(例如狀態(tài)欄從不顯示到顯示祖今,視圖方向變化),已經(jīng)調(diào)整
Subviews的位置拣技,在調(diào)整完成之后要做的一些工作就可以在該方法中實現(xiàn)千诬。
viewWillDisappear
view即將從superView中移除且移除動畫切換之前,此時還沒有調(diào)用removeFromSuperview膏斤。
viewDidDisappear
view從superView中移除徐绑,移除動畫切換之后調(diào)用,此時已調(diào)用removeFromSuperview莫辨。