本文包含对这篇文章的总结与思考loadView vs viewDidLoad FOR PROGRAMATIC UI SETUP
ViewController的生命周期中各方法执行流程如下:init—>loadView—>viewDidLoad—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear—>viewWillUnload->viewDidUnload—>dealloc
loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载)
参考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.
对上述文档的总结:
-
如果使用了storyboard或者nib,对view的其他操作在 viewDidLoad里面进行,viewDidLoad对view进行只读操作
-
若使用代码创建view,则在loadView里面进行
-
在loadView中,使用自己的view覆盖原本view的时候(self.view = CustomView() ) ,不应该调用super.loadView()
-
当controller是继承自UIViewController的时候,上述总结生效,如果是继承自其他controller(eg:UITableViewController),view的操作要放在viewDidLoad
网友评论