本文包含對(duì)這篇文章的總結(jié)與思考loadView vs viewDidLoad FOR PROGRAMATIC UI SETUP
ViewController的生命周期中各方法執(zhí)行流程如下:init—>loadView—>viewDidLoad—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear—>viewWillUnload->viewDidUnload—>dealloc
loadView和viewDidLoad的區(qū)別就是,loadView時(shí)view還沒有生成,viewDidLoad時(shí),view已經(jīng)生成了,loadView只會(huì)被調(diào)用一次,而viewDidLoad可能會(huì)被調(diào)用多次(View可能會(huì)被多次加載)
參考Apple文檔中的說法:
If you prefer to create views programmatically, instead of using a storyboard, you do so by overriding your view controller’s loadView method. Your implementation of this method should do the following:
Create a root view object. …
Create additional subviews and add them to the root view.
For each view, you should:
- Create and initialize the view.
- Add the view to a parent view using the addSubview: method.
If you are using auto layout, assign sufficient constraints to each of the views you just created to control the position and size of your views. Otherwise, …
Assign the root view to the view property of your view controller.
If you cannot define your views in a storyboard or a nib file, override the loadView method to manually instantiate a view hierarchy and assign it to the view property.
…
You can override [the loadView] method in order to create your views manually. If you choose to do so, assign the root view of your view hierarchy to the view property.
…
If you want to perform any additional initialization of your views, do so in the viewDidLoad method.
對(duì)上述文檔的總結(jié):
如果使用了storyboard或者nib,對(duì)view的其他操作在 viewDidLoad里面進(jìn)行,viewDidLoad對(duì)view進(jìn)行只讀操作
若使用代碼創(chuàng)建view,則在loadView里面進(jìn)行
在loadView中,使用自己的view覆蓋原本view的時(shí)候(self.view = CustomView() ) ,不應(yīng)該調(diào)用super.loadView()
當(dāng)controller是繼承自UIViewController的時(shí)候,上述總結(jié)生效,如果是繼承自其他controller(eg:UITableViewController),view的操作要放在viewDidLoad