iOS——ViewController的生命周期

ViewController介绍。

ViewController是iOS设计中一种常见的类,同时他也是MVC中的C控制器
常见的ViewController可以分为两种。

  1. 主要于用户交互,主要展示内容的,例如UITableViewController,UIViewController。
  2. 还有一种是控制其他控制器或者视图的ViewController,比如常见的导航栏控制器UINavigationController,分栏控制器UITabbarController,他们都有一个属性ViewControllers去管理其控制的控制器。

ViewController的生命周期

如下图所示:
在这里插入图片描述
上图中可以很明显的看到ViewController的生命周期中涉及的函数,以及之间的关系,下面来讲一讲函数具体的作用。

涉及函数

首先当我们alloc并且init一个ViewController后首先调用的函数为:loadView()

loadView

当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。ViewController的view是使用了懒加载方式创建,也就是说这里会先判断是否存在View,如果没有创建,那么会调用loadView来创建view。

viewDidLoad

当loadView完成后调用这个函数,这里要注意和loadView的区别,当调用loadView时,view对象还没有加载成功,而调用此函数时View对象已经加载成功,视图即将显示,但是这里的superView一般为nil,此view还没有添加到别的view上。我们可以在此函数中初始化其他控件。

viewWillAppear

该函数顾名思义,视图即将显示时调用

viewWillLayoutSubviews

addSubViews:会调用此方法
控制器将要布局子控件,默认不进行任何操作。你可以在LayoutSubviews之前重写此方法布局子视图。

viewDidLayoutSubviews

子控件已经加载完成

viewDidAppear

视图即将显示完成

viewWillDisappear,viewDidDisappear

视图即将消失,视图已经消失

dealloc

销毁消失的视图,释放viewController的内存。

以上就是完整的viewController的生命周期

view的生命周期

下图框出的部分时view的生命周期
在这里插入图片描述

Demo

//
//  ViewController.m
//  ViewController生命周期
//
//  Created by 差不多先生 on 2021/9/12.
//

#import "ViewController.h"
#import "TextViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
   _pushButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _pushButton.frame = CGRectMake(150, 50, 100, 100);
    [_pushButton setTitle:@"push" forState:UIControlStateNormal];
    [_pushButton addTarget:self action:@selector(pressButton) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_pushButton];
    
}
- (void)pressButton {
    TextViewController* textViewController = [[TextViewController alloc] init];
    textViewController.modalPresentationStyle = UIModalPresentationFullScreen;
   
    UINavigationController* navigitionController = [[UINavigationController alloc] initWithRootViewController:textViewController];
    navigitionController.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:navigitionController animated:YES completion:nil];
    
}
- (void)loadView {
    [super loadView];
    NSLog(@"loadView");
}
- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"viewDidAppear!");
}
- (void)viewDidDisappear:(BOOL)animated {
    NSLog(@"viewDidDisappear!");
}
- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"viewWillAppear!");
}
- (void)viewWillDisappear:(BOOL)animated {
    NSLog(@"viewWillDisappear!");
}
- (void)viewDidLayoutSubviews {
    NSLog(@"viewDidLayoutSubviews!");
}
- (void)viewWillLayoutSubviews {
    NSLog(@"viewWillLayoutSubviews!");
}

@end

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值