视图控制器的生命周期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图控制器的生命周期相关的知识,希望对你有一定的参考价值。
补充: NSLog(@"%s",__func__);//这句话可以打印什么类中的什么方法
一 什么是视图控制器
(1)视图控制器就是用来“控制”或者“管理”界面(视图)的
控制器就是创建控件和给控件传递数据的
“换句话说界面长得丑与美由视图控制器说的算”
(2)每个视图控制器(UIViewController)都有一个View属性来描述界面长什么
二 视图控制器的创建方式
(1)UIStoryboard的方式
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
*1 获取storyboard箭头所指的视图控制器
ViewController *vc = [storyboard instantiateInitialViewController];
*2 获取storyboard标识了ID所指的视图控制器
ViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"haha"];
(2)直接创建控制器
ViewController *vc2 =[[ViewController alloc]init];
(3)创建带xib的视图控制器
ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
* 调用控制器的【-(instancetype)initWithNibName:bundle:】;
"【总结视图控制器的View创建的流程】"
如果控制器是从storyboard创建,loadView从storyboard加载
如果控制器是自己创建,加载xib,没有xib,自己创建一个空白的view
如果控制器是从storyboard创建,loadView从storyboard加载
如果控制器是自己创建,加载xib,没有xib,自己创建一个空白的view
三 控制器的生命周期
(1)理解控制器的生命周期的几个方法
*1 视图控制器初始化的时候调用这个方法(复写这三种方法都要父类调用)
- (id)initWithCoder:(NSCoder *)aDecoder;//创建视图控制器
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
-(id)init;
*2当使用视图控制器上的view的时候用这两个方法(使用其他的view不会调用)
loadView//视图的自定义
注:当程序中的控件加载完毕时的时候自动调用ViewDidLoad
viewDidLoad //view加载完毕
注:view的懒加载:啥时候使用view,啥时候调用这两个方法;(这个是把view样式加载到内存中,viewWippAppear的目的是按照view样式渲染到屏幕上)
*3 当视图显示的时候调用这个两个方法(即开始显示在窗口的时候开始调用 )
viewWillAppear//view即将显示
viewDidAppear//view已经显示
viewWillDisappear//view即将消失
viewDidDisappear//view已经消失
viewWillUnload//view即被卸载
viewDidUnload//view已经卸载
viewDidDisappear//view已经消失
viewWillUnload//view即被卸载
viewDidUnload//view已经卸载
dealloc//控制器被销毁
补充1:
如果控制器不消失的话,一般不会执行viewWillUnload,(除非内存警告)
补充2:
使用xib创建的视图
MyView *view1 = [[[NSBundle mainBundle]loadNibNamed:@"View" owner:nil options:nil]lastObject];
#import "MyView.h"
@implementation MyView
当是视图初始化的时候调用这个方法
-(void)awakeFromNib{
[super awakeFromNib];
NSLog(@"%s",__func__);
}
[super awakeFromNib];
NSLog(@"%s",__func__);
}
@end
生命周期方法
iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的区别及用途
init-初始化程序
viewDidLoad-加载视图
viewWillAppear-UIViewController对象的视图即将加入窗口时调用;
viewDidApper-UIViewController对象的视图已经加入到窗口时调用;
viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;
viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;
viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;
viewDidUnload-当内存过低,释放一些不需要的视图时调用。
视图控制对象通过alloc和init来创建,但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。比如,当某个标签有很多UIViewController对象,那么对于任何一个UIViewController对象的视图,只有相应的标签被选中时才会被创建出来。
以上是关于视图控制器的生命周期的主要内容,如果未能解决你的问题,请参考以下文章
[ IOS ] 视图控制对象ViewController的生命周期