一、程序生命周期(App Lifecycle)
关键方法及调用时机:
方法名 (Swift) |
方法名 (Objective-C) |
调用时机 |
application(_:didFinishLaunchingWithOptions:) |
application:didFinishLaunchingWithOptions: |
应用首次启动时 |
applicationDidBecomeActive |
applicationDidBecomeActive: |
应用进入前台时 |
applicationWillResignActive |
applicationWillResignActive: |
应用即将进入后台时 |
applicationDidEnterBackground |
applicationDidEnterBackground: |
应用完全进入后台时 |
applicationWillEnterForeground |
applicationWillEnterForeground: |
应用即将回到前台时 |
applicationWillTerminate |
applicationWillTerminate: |
应用即将终止时 |
Swift 代码示例(AppDelegate.swift):
swift
复制代码
import UIKit
@UIApplicationMain
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 Did Become Active")
}
func applicationWillResignActive(_ application: UIApplication) {
print("App Will Resign Active")
}
func applicationDidEnterBackground(_ application: UIApplication) {
print("App Did Enter Background")
}
func applicationWillEnterForeground(_ application: UIApplication) {
print("App Will Enter Foreground")
}
func applicationWillTerminate(_ application: UIApplication) {
print("App Will Terminate")
}
}
Objective-C 代码示例(AppDelegate.m):
objectivec
复制代码
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"App Launched");
return YES;
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"App Did Become Active");
}
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"App Will Resign Active");
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"App Did Enter Background");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"App Will Enter Foreground");
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"App Will Terminate");
}
@end
二、视图生命周期(ViewController Lifecycle)
关键方法及调用顺序:
方法名 (Swift) |
方法名 (Objective-C) |
调用时机 |
viewDidLoad() |
viewDidLoad |
视图加载完成时(只调用一次) |
viewWillAppear(_:) |
viewWillAppear: |
视图即将显示时 |
viewDidAppear(_:) |
viewDidAppear: |
视图完全显示时 |
viewWillDisappear(_:) |
viewWillDisappear: |
视图即将消失时 |
viewDidDisappear(_:) |
viewDidDisappear: |
视图完全消失时 |
viewWillLayoutSubviews() |
viewWillLayoutSubviews |
即将布局子视图时 |
viewDidLayoutSubviews() |
viewDidLayoutSubviews |
完成布局子视图时 |
deinit |
dealloc |
视图控制器销毁时 |
Swift 代码示例(ViewController.swift):
swift
复制代码
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("View Did Load")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("View Will Appear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("View Did Appear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("View Will Disappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("View Did Disappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
print("View Will Layout Subviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print("View Did Layout Subviews")
}
deinit {
print("View Controller Deinitialized")
}
}
Objective-C 代码示例(ViewController.m):
objectivec
复制代码
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"View Did Load");
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"View Will Appear");
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"View Did Appear");
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"View Will Disappear");
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"View Did Disappear");
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
NSLog(@"View Will Layout Subviews");
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"View Did Layout Subviews");
}
- (void)dealloc {
NSLog(@"View Controller Deallocated");
}
@end
三、生命周期流程图
复制代码
程序启动:
didFinishLaunchingWithOptions
→ applicationDidBecomeActive
从后台回到前台:
applicationWillEnterForeground
→ applicationDidBecomeActive
进入后台:
applicationWillResignActive
→ applicationDidEnterBackground
视图控制器显示:
viewDidLoad
→ viewWillAppear
→ viewDidAppear
视图控制器消失:
viewWillDisappear
→ viewDidDisappear
四、关键场景说明
-
viewDidLoad
- 最佳实践:初始化界面元素、网络请求、数据加载
- 注意:此时视图的 bounds 可能尚未确定
-
viewDidAppear
- 最佳实践:启动动画、定时器、位置更新
- 注意:避免在此处执行耗时操作
-
viewDidDisappear
-
deinit
/dealloc
通过理解这些生命周期方法,开发者可以更好地控制应用状态和视图行为,实现内存管理优化和流畅的界面交互。