零基础iOS开发学习日记-modal跳转与视图生命周期

1,065 阅读2分钟

开头

界面跳转-modal

- (void)btnClick {
    testViewController *vc = [testViewController new];
    //全屏弹出
    vc.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:vc animated:YES completion:nil];
}
  • 消失
- (void)back {
    [self dismissViewControllerAnimated:NO completion:nil];
}

视图生命周期

系统相关函数

  • 创建view,此时刚开始view为nil,如果需要自定义view,则不需要调用super的方法
//加载
- (void)loadView {
    [super loadView];
    NSLog(@"ViewController - loadView");
}
  • 进行控件加载,但是并不能显示,也没有被添加到界面上
//已经加载
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"ViewController - viewDidLoad");
}
  • 此时才会开始添加子控件,才会显示相应控件,有对应的视图层次结构,这个函数结束之后,界面才会出现
//将要出现
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"ViewController - viewWillAppear");
}
  • 界面完全显现
//已经出现
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"ViewController - viewDidAppear");
}
//将要消失
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSLog(@"ViewController - viewWillDisappear");
}
//已经消失
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    NSLog(@"ViewController - viewDidDisappear");
}

界面出现的顺序

ViewController - loadView
ViewController - viewDidLoad
ViewController - viewWillAppear
ViewController - viewDidAppear

界面切换的顺序

testViewController - loadView
testViewController - viewDidLoad
ViewController - viewWillDisappear
testViewController - viewWillAppear
testViewController - viewDidAppear
ViewController - viewDidDisappear

界面跳回的顺序

testViewController - viewWillDisappear
ViewController - viewWillAppear
ViewController - viewDidAppear
testViewController - viewDidDisappear
testViewController - dealloc

实际使用

  • 我在实际开发中,最常操作的还是在loadViewviewDidLoad
  • loadView是在控制器的view为nil的时候加载的,也就是说,当你需要更换控制器的根view时,可以在这个函数中写,而且不需要调用super的方法
  • 那么,控件加载一般是写在viewDidLoad

总结

  1. 界面跳转就好比叠盘子,一个个叠上去,最下面的会一直被保存,而当上面的界面被撤掉后,则直接被销毁
  2. 在整个界面显示的过程中,数据的加载和显示,其实是分开的