iOS,UIViewController和nib方法的載入順序

weixin_34413065發表於2015-12-17

首先要知道IB是什麼鬼,

IB = interface builder,用來畫SB和NIB的,

檢視載入過程

第一步:initWithNibName

最先載入的方法,用來例項化UiViewController,是每個方法必須呼叫的函式,他的宣告如下

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)

引數:

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()

  • 當view需要被展示而它卻是nil時,viewController會呼叫該方法。不要直接呼叫該方法。
  • 如果手工維護views,必須過載重寫該方法
  • 如果使用IB維護views,必須不能過載重寫該方法

第三步:func viewDidLoad()

  • 如果loadView不能生成UIViewController.view系統將會反覆呼叫loadView及viewDidLoad方法, 並且最終呼叫[super loadView] 方法返回UIViewController.view
  • 過載重寫該方法以進一步定製view
  • 在iPhone OS 3.0及之後的版本中,還應該過載重寫viewDidUnload來釋放對view的任何索引
  • viewDidLoad後呼叫資料Model

在檢視載入後被呼叫,

  • 如果是在程式碼中建立的檢視載入器,他將會在loadView方法後被呼叫,
  • 如果是從nib檢視頁面輸出,他將會在檢視設定好後後被呼叫。

第四步:func viewWillAppear(_ animated: Bool)

push到另外的檢視,然後回來的時候被呼叫

第五步:func viewDidAppear(_ animated: Bool)

檢視已完全過渡到螢幕上時呼叫

檢視解除安裝過程

第一步:func viewWillDisappear(_ animated: Bool)

第二步:func viewDidDisappear(_ animated: Bool)

第三步:func didReceiveMemoryWarning()

**另外:當程式收到記憶體不足的警告後, 程式記憶體中的所有的UIViewController都將會收到didReceiveMemoryWarning呼叫訊息. 目的是將當前不顯示的UIViewController中的view釋放掉(不會呼叫UIViewController的dealloc方法), 所以當該UIViewController再次顯示的時候又要生成一次, 此時它會呼叫loadView-> viewDidLoad ->viewWillAppear等, 這時最容易造成記憶體洩漏!
**

如果是載入nib檔案的話:

當.nib檔案被載入的時候,會傳送一個awakeFromNib的訊息到.nib檔案中的每個物件,每個物件都可以定義自己的awakeFromNib函式來響應這個訊息,執行一些必要的操作。也就是說通過nib檔案建立view物件時執行awakeFromNib

引用文章 UIViewController各個方法的載入順序

相關文章