首先要知道IB是什么鬼休玩,
IB = interface builder著淆,用來畫SB和NIB的,
視圖加載過程
第一步:initWithNibName
最先加載的方法拴疤,用來實例化UiViewController永部,是每個方法必須調(diào)用的函數(shù),他的聲明如下
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
參數(shù):
nibName :
The name of the nib file to associate with the view controller. The nib file name should not contain any leading path information. If you specify nil, the nibName property is set to nil.
nibBundle :
The bundle in which to search for the nib file. This method looks for the nib file in the bundle's language-specific project directories first, followed by the Resources directory. If this parameter is nil, the method uses the heuristics described below to locate the nib file.
第二步:func LoadView()
- 當(dāng)view需要被展示而它卻是nil時呐矾,viewController會調(diào)用該方法苔埋。不要直接調(diào)用該方法。
- 如果手工維護(hù)views蜒犯,必須重載重寫該方法
- 如果使用IB維護(hù)views组橄,必須不能重載重寫該方法
第三步:func viewDidLoad()
- 如果loadView不能生成UIViewController.view系統(tǒng)將會反復(fù)調(diào)用loadView及viewDidLoad方法, 并且最終調(diào)用[super loadView] 方法返回UIViewController.view
- 重載重寫該方法以進(jìn)一步定制view
- 在iPhone OS 3.0及之后的版本中,還應(yīng)該重載重寫viewDidUnload來釋放對view的任何索引
- viewDidLoad后調(diào)用數(shù)據(jù)Model
在視圖加載后被調(diào)用罚随,
- 如果是在代碼中創(chuàng)建的視圖加載器玉工,他將會在loadView方法后被調(diào)用,
- 如果是從nib視圖頁面輸出淘菩,他將會在視圖設(shè)置好后后被調(diào)用遵班。
第四步:func viewWillAppear(_ animated: Bool)
push到另外的視圖,然后回來的時候被調(diào)用
第五步:func viewDidAppear(_ animated: Bool)
視圖已完全過渡到屏幕上時調(diào)用
視圖卸載過程
第一步:func viewWillDisappear(_ animated: Bool)
第二步:func viewDidDisappear(_ animated: Bool)
第三步:func didReceiveMemoryWarning()
**另外:當(dāng)程序收到內(nèi)存不足的警告后, 程序內(nèi)存中的所有的UIViewController都將會收到didReceiveMemoryWarning調(diào)用消息. 目的是將當(dāng)前不顯示的UIViewController中的view釋放掉(不會調(diào)用UIViewController的dealloc方法), 所以當(dāng)該UIViewController再次顯示的時候又要生成一次, 此時它會調(diào)用loadView-> viewDidLoad ->viewWillAppear等, 這時最容易造成內(nèi)存泄漏!
**
如果是加載nib文件的話:
當(dāng).nib文件被加載的時候潮改,會發(fā)送一個awakeFromNib的消息到.nib文件中的每個對象狭郑,每個對象都可以定義自己的awakeFromNib函數(shù)來響應(yīng)這個消息,執(zhí)行一些必要的操作汇在。也就是說通過nib文件創(chuàng)建view對象時執(zhí)行awakeFromNib