【iOS】UIViewController的生命周期

目录

  • 前言
    • UIViewController
      • [1. `viewDidLoad`](#1. viewDidLoad)
      • [2. `viewWillAppear:`](#2. viewWillAppear:)
      • [3. `viewDidAppear:`](#3. viewDidAppear:)
      • [4. `viewWillDisappear:`](#4. viewWillDisappear:)
      • [5. `viewDidDisappear:`](#5. viewDidDisappear:)
      • [6. `loadView`](#6. loadView)
      • [7. `viewWillLayoutSubviews` 和 `viewDidLayoutSubviews`](#7. viewWillLayoutSubviewsviewDidLayoutSubviews)
      • [8. `viewWillTransition:toSize:withTransitionCoordinator:`](#8. viewWillTransition:toSize:withTransitionCoordinator:)
      • [9. `dealloc`](#9. dealloc)
  • 总结

前言

  本篇博客主要是关于UIViewController的生命周期。在iOS开发中UIViewController扮演者非常重要的角色,它是视图view和数据model的桥梁,通过UIViewController的管理有条不紊的将数据展示在视图上。作为UIKit中最基本的一个类,一般复杂的项目都离不开UIViewController作为基类。所以了解UIViewController的整个生命周期是有必要的。

UIViewController

在 Objective-C 中,UIViewController 的生命周期由一系列的方法调用组成,这些方法可以在视图控制器的各个阶段被调用。了解这些生命周期方法对于管理视图控制器的状态、执行必要的设置以及清理资源非常重要。

以下是 UIViewController 的主要生命周期方法及其用途:

1. viewDidLoad

当视图控制器的视图首次加载时调用。这是初始化视图和配置子视图的好地方。

objective-c 复制代码
- (void)viewDidLoad {
    [super viewDidLoad];
    // 初始化代码,比如加载子视图等
}

2. viewWillAppear:

在视图即将出现时调用,并且会传入一个动画参数。

objective-c 复制代码
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    // 配置界面,比如更新导航栏按钮
}

3. viewDidAppear:

在视图已经出现后调用,也会传入一个动画参数。

objective-c 复制代码
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // 执行一些在视图完全出现后的操作
}

4. viewWillDisappear:

在视图即将消失时调用,也会传入一个动画参数。

objective-c 复制代码
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // 准备释放资源或保存状态
}

5. viewDidDisappear:

在视图已经消失后调用,也会传入一个动画参数。

objective-c 复制代码
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    // 清理操作,比如移除通知监听
}

6. loadView

在视图控制器首次触发加载视图时调用。如果你要自定义视图的创建过程,可以重写此方法。

objective-c 复制代码
- (void)loadView {
    // 创建自定义视图
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
}

7. viewWillLayoutSubviewsviewDidLayoutSubviews

当视图的布局将要进行或已经完成时调用。这些方法在视图的尺寸发生变化时非常有用。

objective-c 复制代码
- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
    // 布局将要发生
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    // 布局已完成
}

8. viewWillTransition:toSize:withTransitionCoordinator:

在视图控制器的视图大小将要改变时调用,比如设备旋转。

objective-c 复制代码
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
    // 处理视图大小变化
}

9. dealloc

当视图控制器被销毁时调用。这是一个清理资源的好地方,比如取消网络请求、移除定时器等。

objective-c 复制代码
- (void)dealloc {
    // 清理代码
}

总结

理解并正确实现这些生命周期方法是开发 iOS 应用的关键部分。使用这些方法可以管理内存、更新 UI、响应设备方向变化等。

参考文章:
UIViewController的生命周期详解 UIViewController 生命周期

相关推荐
深念Y4 小时前
PVE 安装黑苹果并直通 Quadro P400
macos·ios·黑苹果·驱动·苹果·英伟达·p400
weixin-a153003083165 小时前
7.Appium-ios端自动化
ios·appium·自动化
ACP广源盛139246256736 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源
sysinside8 小时前
VMware Fusion 26H1u1 for Mac - 领先的免费桌面虚拟化软件
macos·fusion
夕小瑶8 小时前
豆包工作」升级实测:多Agents并行,操作Mac电脑
macos
Anhty20 小时前
2026九月最新变声器测评:iOS安卓双端适配,低延迟运行更稳定
android·人工智能·功能测试·ios·智能手机
黄一一91124321 小时前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件
_瑞1 天前
APM_OOMDetector
ios
秋雨梧桐叶落莳1 天前
【iOS】从源码深入理解RunLoop机制
macos·ios·objective-c·cocoa·cocoapods·uikit
烂蜻蜓1 天前
Flask入门教程(二十七):Session Interface API——自定义Session存储后端
网络·ios·flask