iOS ——UIViewController的生命周期与Push&Present

文章目录

    • UIViewController的生命周期
    • Present&Push

UIViewController的生命周期

UIViewController采用懒加载的方式,也就是说第一次访问到view属性时才会加载或创建它。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。
iOS ——UIViewController的生命周期与Push&Present_第1张图片
1、+ (id)alloc 分配内存

2、- (id)init 方法 包括其他-(id)init…方法),只允许调用一次,并且要与 alloc方法 写在一起,在init方法中申请的内存,要在dealloc方法中释放(或者其他地方)

3、- (void)loadView 切勿直接调用此方法。视图控制器在请求其 view 属性时调用此方法,但当前为 。此方法加载或创建视图,并将其分配给 view 属性。nil

如果视图控制器具有关联的 nib 文件,则此方法从 nib 文件加载视图。如果 nib Name 属性返回非值,则视图控制器具有关联的 nib 文件,如果视图控制器是从情节提要实例化而来的,如果您使用 init(nibName:bundle:) 方法显式为其分配了一个 nib 文件,或者如果 iOS 在应用程序捆绑包中查找名称基于视图控制器类名的 nib 文件,则会发生这种情况。如果视图控制器没有关联的 nib 文件,则此方法将改为创建一个普通的 UIView 对象。nil

如果使用接口生成器创建视图并初始化视图控制器,则不得重写此方法。

您可以重写此方法以手动创建视图。如果选择这样做,请将视图层次结构的根视图分配给视图属性。您创建的视图应该是唯一的实例,不应与任何其他视图控制器对象共享。此方法的自定义实现不应调用 。super

如果要对视图执行任何其他初始化,请在ViewDidLoad() 方法中执行此操作。

4、- (void)viewDidLoad 视图加载完成之后被调用,iOS6.0 以后只执行一次
切勿直接调用此方法。视图控制器在请求其 view 属性时调用此方法,但当前为 。此方法加载或创建视图,并将其分配给 view 属性。

5、- (void)viewWillAppear:(BOOL)animated 视图即将要显示,可以在此加载一些图片,和一些其他占内存的资源
在视图控制器的视图即将添加到视图层次结构之前,以及在配置任何动画以显示视图之前,将调用此方法。您可以重写此方法以执行与显示视图关联的自定义任务。例如,可以使用此方法更改状态栏的方向或样式,以与所显示视图的方向或样式相协调。如果重写此方法,则必须在实现中的某个时刻调用。

6、- (void)viewWillLayoutSubviews 视图即将开始布局子控件
当视图的边界更改时,视图将调整其子视图的位置。视图控制器可以重写此方法,以便在视图布局其子视图之前进行更改。此方法的默认实现不执行任何操作。

7、- (void)viewDidLayoutSubviews 视图已经完成子控件的布局
当视图控制器视图的边界更改时,视图会调整其子视图的位置,然后系统调用此方法。但是,调用此方法并不表示视图子视图的各个布局已调整。每个子视图都负责调整自己的布局。

视图控制器可以重写此方法,以便在视图布局其子视图后进行更改。此方法的默认实现不执行任何操作。

8、- (void)viewDidAppear:(BOOL)animated 视图已经显示
注意
如果视图控制器由弹出框内的视图控制器呈现,则在显示的控制器被关闭后,不会在呈现的视图控制器上调用此方法。

9、- (void)viewWillDisappear:(BOOL)animated 视图即将消失 可以在此将一些占用内存比较大的资源先释放掉,在 viewWillAppear: 中重新加载。
调用此方法是为了响应从视图层次结构中删除的视图。此方法在实际删除视图之前和配置任何动画之前调用。
子类可以重写此方法并使用它来提交编辑更改、重新指定视图的第一响应者状态或执行其他相关任务。例如,可以使用此方法还原在视图首次显示视图时在 viewDidAppear(_:) 方法中对状态栏的方向或样式所做的更改。如果重写此方法,则必须在实现中的某个时刻调用。

10、- (void)viewDidAppear:(BOOL)animated 视图已经消失

11、- (void)dealloc 视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

Present&Push

[self presentViewController:newViewController animated:YES completion:nil];
//present下一界面

[self dismissViewControllerAnimated:YES completion:nil];
//dismiss上一界面
[self.navigationController pushViewController:vc animated:YES];
//push下一界面

[self.navigationController popViewControllerAnimated:YES];
//返回上一界面

[self.navigationController popToViewController:vc2 animated:YES];
//返回指定界面

[self.navigationController popToRootViewControllerAnimated:YES];
//返回第一界面

你可能感兴趣的:(笔记,ios,xcode,objective-c)