原文:https://blog.caramba.io/ios-uiviewcontroller-lifecycle-261e3e2f6133#.9o89edexh
翻译水平有限,望赐教
UIViewController是ios sdk最常用的对象之一。重点要理解控制器的生命周期事件以及如何使用他们。
我们将关注用于加载视图的事件
1.生命周期事件顺序
- -(void)loadView()
- -(void)viewDidLoad()
- -(void)viewWillAppear()
- -(void)viewWillLayoutSubviews()
- -(void)viewDidLayoutSubviews()
- -(void)viewDidApear()
2.如何使用
-(void)loadView — 创建控制器管理的视图
仅限于代码式创建控制器时调用,重写此方法,你可以手动创建自己的view
-(void)viewDidLoad — 控制器的视图加载到内存中时调用
view创建好后调用。记住,view的bounds在此生命周期中不是最终数据,这里是初始化和设置对象的好地方
- (void)viewWillAppear:(BOOL)animated — 通知控制器view即将加入到视图层级中
视图显示到屏幕上的时候调用。到这一步时,view的bounds已经定义好,但orientation未确定。视图显示到屏幕时,每次都会调用这个方法,所以不要添加任何本应该只执行一次的代码(或者正确的使用)
-(void)viewWillLayoutSubviews —告知控制器,view即将布局他的子视图
每次frame改变的时候都会调用此方法。例如屏幕旋转或者标记了更新(setNeedsLayout())在这里,view的bounds已经确定,如果没有用autoresizing masks或者constraint或者视图大小改变了,你应该在这里更新子视图布局
-(void)viewDidLayoutSubviews — 通知视图控制器view已布局好子视图
布局好子视图后,在此处做其他修改
-(void)viewDidAppear:(BOOL)animated — 通知视图控制器view已经加入到视图层级中
执行有关视图呈现的其他任务(如动画)此方法在显示动画后执行。因此,在这里view对用户已经可见
这里是从core data或者网络服务器,加载请求数据显示数据的好地方