当前位置: 首页 > news >正文

swift开发,关于应用、页面、视图的生命周期

目录

      • 一、应用生命周期(App Lifecycle)
        • UIKit (AppDelegate)
        • SwiftUI (使用 ScenePhase)
      • 二、页面生命周期(ViewController Lifecycle)
      • 三、视图生命周期(UIView Lifecycle)
      • 四、SwiftUI 视图生命周期
      • 五、关键对比总结

在 Swift 开发中,应用、页面(视图控制器)和视图的生命周期是核心概念。以下是 iOS 开发中(UIKit 和 SwiftUI)的生命周期详解:


一、应用生命周期(App Lifecycle)

通过 AppDelegate 或 SwiftUI 的 App 协议管理应用级事件:

UIKit (AppDelegate)
class AppDelegate: UIResponder, UIApplicationDelegate {// 应用启动完成func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {print("App Launched")return true}// 应用进入前台func applicationDidBecomeActive(_ application: UIApplication) {print("App Active")}// 应用进入后台func applicationDidEnterBackground(_ application: UIApplication) {print("App Background")}// 应用即将终止func applicationWillTerminate(_ application: UIApplication) {print("App Terminated")}
}
SwiftUI (使用 ScenePhase)
@main
struct MyApp: App {@Environment(\.scenePhase) var scenePhasevar body: some Scene {WindowGroup {ContentView()}.onChange(of: scenePhase) { newPhase inswitch newPhase {case .active: print("App Active")case .inactive: print("App Inactive")case .background: print("App Background")@unknown default: break}}}
}

二、页面生命周期(ViewController Lifecycle)

UIKit 的UIViewController生命周期(每个方法都需调用 super):

方法调用时机
init(coder:)/ init(nibName:bundle:)控制器初始化
loadView()创建视图层次结构(不要手动调用)
viewDidLoad()视图加载完成(只调用一次)
viewWillAppear(_:)视图即将显示(每次进入页面时调用)
viewWillLayoutSubviews()视图即将布局子视图
viewDidLayoutSubviews()视图已完成子视图布局
viewDidAppear(_:)视图已显示
viewWillDisappear(_:)视图即将消失
viewDidDisappear(_:)视图已消失
deinit控制器销毁

示例代码:

class ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()print("View Loaded")}override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)print("View Will Appear")}override func viewDidDisappear(_ animated: Bool) {super.viewDidDisappear(animated)print("View Disappeared")}deinit {print("ViewController Deallocated")}
}

三、视图生命周期(UIView Lifecycle)

UIKit 的UIView关键方法

方法调用时机
init(frame:) / init(coder:)视图初始化
didAddSubview(_:)子视图被添加
willRemoveSubview(_:)子视图将被移除
willMove(toSuperview:)即将添加到父视图
didMoveToSuperview()已添加到父视图
layoutSubviews()布局子视图(布局变更时调用)
draw(_:)需要重绘内容(避免手动调用)
removeFromSuperview()从父视图移除
deinit视图销毁

示例代码:

class CustomView: UIView {override func layoutSubviews() {super.layoutSubviews()print("Layout Subviews (e.g., frame changed)")}deinit {print("View Deallocated")}
}

四、SwiftUI 视图生命周期

SwiftUI 使用声明式语法,通过修饰符响应事件:

修饰符作用
.onAppear { }视图出现时调用(类似 viewDidAppear
.onDisappear { }视图消失时调用(类似 viewDidDisappear
.task { }异步任务启动,视图消失时自动取消
.onChange(of: value) { }状态变化时响应

示例代码:

struct ContentView: View {@State private var text = "Hello"var body: some View {Text(text).onAppear {print("SwiftUI View Appeared")// 初始化数据}.onDisappear {print("SwiftUI View Disappeared")}.task {// 异步加载数据await loadData()}.onChange(of: text) { newValue inprint("Text changed to \(newValue)")}}
}

五、关键对比总结

概念UIKitSwiftUI
应用启动application(_:didFinishLaunching...)App协议 + onChange(of: scenePhase)
页面显示/隐藏viewWillAppear
/viewDidAppear
.onAppear
/.onDisappear
布局更新layoutSubviews()自动响应状态变化
异步任务手动管理(需在 viewDidDisappear取消).task自动取消
销毁deinit结构体自动释放

📌 最佳实践

  • UIKit:在 viewDidLoad 中初始化数据,在 viewWillAppear 中刷新 UI。
  • SwiftUI:用 .onAppear 替代 viewDidLoad + viewWillAppear,用 .task 处理异步。
  • 避免在 layoutSubviews() 中做耗时操作(可能频繁调用)。

掌握这些生命周期可避免内存泄漏、优化性能并确保正确的数据加载时机。

http://www.xdnf.cn/news/1095571.html

相关文章:

  • WIFI协议全解析05:WiFi的安全机制:IoT设备如何实现安全连接?
  • 【数据结构】时间复杂度和空间复杂度
  • 解析LLM层裁剪:Qwen实战指南
  • XMAPP MySQL 启动后自动停止
  • Java-69 深入浅出 RPC 单体架构 垂直架构 分布式架构 微服务架构
  • 堆的应用(讲解超详细)
  • 学习软件测试的第十四天(移动端)
  • ElementUI:高效优雅的Vue.js组件库
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置
  • Eigen中四元数、欧拉角、旋转矩阵、旋转向量之间的转换
  • 解锁医疗新视界:医患共决策时间轴AI可视化工具
  • HighReport报表工具开始支持BS报表设计器
  • msf复现永恒之蓝
  • 不止于快:金士顿XS2000移动固态硬盘如何重塑你的数字生活
  • 32多串300A保护板测试仪:新能源电池安全的核心守护者
  • 服务器组件与 Actions:重塑 React 数据交互
  • Linux 内核日志中常见错误
  • 前端开发资源压缩与请求优化
  • 编译OpenHarmony-4.0-Release RK3566 报错
  • 鸿蒙开发文档
  • Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
  • 观成科技:基于自监督学习技术的恶意加密流量检测方案
  • 论文精读(一)| 量子计算系统软件研究综述
  • 图书管理系统(完结版)
  • Redis数据安全性分析
  • 心智模式:觉察思维定势,突破决策盲区
  • 【QT】文件、多线程、网络相关内容
  • 【PyTorch】PyTorch中数据准备工作(AI生成)
  • C++并发编程-11. C++ 原子操作和内存模型
  • 继承与多态:面向对象编程的两大支柱