【iOS】——UIViewController生命周期

文章目录

  • 一、UIviewController的概念
  • 二、UIViewController的生命周期


一、UIviewController的概念

UIViewController 是 iOS 开发中用于管理用户界面的重要类之一。它负责控制一个视图的生命周期以及与该视图相关的用户交互和数据展示。

二、UIViewController的生命周期

生命周期是指对象从创建到被销毁的整个过程。当需要一个对象时,他会被创建并分配内存空间;当它不再被需要时,应该被系统释放回收。

UIViewController的生命周期包含了如下的一些函数:

init:初始化ViewController本身。

loadView:加载视图。在此方法中,可以手动创建或从 NIB 文件加载视图,并将其分配给视图控制器的 view 属性。

viewDidLoad:视图已经加载完成。在此方法中,可以进行对视图的初始化设置、添加子视图和设置数据等操作。通常用于初始化视图控制器的数据和准备显示内容。

viewWillAppear:视图即将显示在屏幕上,并在视图转换动画开始之前调用。可以在此方法中执行一些准备工作,如更新数据或刷新界面。

viewDidAppear:视图已经显示在屏幕上,并在视图转换动画完成后调用。可以在此方法中执行一些需要在视图完全显示后才能进行的操作,如启动定时器、请求网络数据等。

viewWillDisappear:视图即将从屏幕上消失,并在视图转换动画开始之前调用。可以在此方法中执行一些清理工作或保存数据等操作。

viewDidDisappear:视图已经从屏幕上消失,并在视图转换动画完成后调用。可以在此方法中执行一些需要在视图完全消失后才能进行的操作,如停止定时器或释放资源等。

dealloc:视图控制器即将销毁,用于释放资源和做一些清理工作。

需要注意的是,不要在loadView中调用父类方法[super loadView],因为这会影响CPU性能。
切换前后台不会调用viewWillAppear。

示例代码如下:

#import "ViewController.h"
#import "NewViewController.h"

@interface ViewController ()

@end

@implementation ViewController

//- (void)loadView {
//    NSLog(@"loadView");
//}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    UILabel* label = [[UILabel alloc] init];
    label.frame = CGRectMake(200, 200, 200, 200);
    label.text = @"UIViewController";
    label.textColor = [UIColor blueColor];
    [self.view addSubview:label];
    
    UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(100, 500, 100, 100);
    [button setTitle:@"切换视图" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(pressPush) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    NSLog(@"viewDidLoad");
}
- (void)viewWillAppear:(BOOL)animated {
    NSLog(@"viewWillAppear");
}
- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"viewDidAppear");
}
- (void)viewWillDisappear:(BOOL)animated {
    NSLog(@"viewWillDisappear");
}
- (void)viewDidDisappear:(BOOL)animated {
    NSLog(@"viewDidDisappear");
}
- (void)pressPush {
    NewViewController* newViewController = [[NewViewController alloc] init];
    newViewController.modalPresentationStyle = UIModalPresentationFullScreen;

    [self presentViewController:newViewController animated:YES completion:nil];
}
@end

运行结果如下:

运行程序时:

【iOS】——UIViewController生命周期_第1张图片

点击切换视图按钮后:

【iOS】——UIViewController生命周期_第2张图片

loadView这个方法是系统默认创建的 因为重写了这个方法导致必须要继承其父类的方法,如果不写继承的loadView,无法继承父系的loadview的创建方法,那么就永远无法创建,那么就会陷入循环。


你可能感兴趣的:(ios,cocoa,macos)