最近发现很多人对视图生命周期的调用顺序不是很清楚,这里我们就来记录总结下视图的生命周期,以便帮助大家提高开发效率和代码质量.
控制器生命周期
UIViewController控制器的生命周期包括如下方法:
- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewWillLayoutSubviews;
- (void)viewDidLayoutSubviews;
生命周期调用顺序
加载一个RootViewController,对应调用顺序如下:
viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews ->
viewDidLayoutSubviews - > viewDidAppear
从 RootVc 切换到 NextVc,调用顺序:
NextVc : viewDidLoad -> RootVc : viewWillDisappear -> NextVc : viewWillAppear ->
NextVc : viewWillLayoutSubviews -> NextVc : viewDidLayoutSubviews -> RootVc : viewDidDisappear ->
NextVc : viewDidAppear
从 NextVc 返回 RootVc,调用顺序:
NextVc : viewWillDisappear -> RootVc : viewWillAppear -> NextVc : viewDidDisappear ->
RootVc : viewDidAppear
子视图Subview
控制器 View 添加/移除 subView,触发 Layout 生命周期方法:
viewWillLayoutSubviews -> viewDidLayoutSubviews
改变 subView frame:
- 修改subView(x,y)坐标,不触发生命周期方法;
- 修改subView (width,height) ,同上触发 Layout 生命周期方法
改变 subView bounds:
- 修改subView (x,y) 坐标,触发 Layout 生命周期
- 修改subView (width,height),触发 Layout 生命周期
网友评论