pragma 标准写法
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma mark -
#pragma mark - private methods 私有方法
#pragma mark -
#pragma mark - public methods 公有方法
#pragma mark -
#pragma mark - override methods 复写方法
#pragma mark -
#pragma mark - getters and setters 设置器和访问器
#pragma mark -
#pragma mark - UITableViewDelegate
#pragma mark -
#pragma mark - CustomDelegate 自定义的代理
#pragma mark -
#pragma mark - event response 所有触发的事件响应 按钮、通知、分段控件等
#pragma mark -
#pragma mark - life cycle 视图的生命周期
#pragma mark -
#pragma mark - StatisticsLog 各种页面统计Log
Swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// MARK: -
// MARK: - override methods 复写方法
// MARK: -
// MARK: - getters and setters 设置器和访问器
// MARK: -
// MARK: - UITableViewDelegate 代理
// MARK: -
// MARK: - CustomDelegate 自定义的代理
// MARK: -
// MARK: - event response 所有触发的事件响应 按钮、通知、分段控件等
// MARK: -
// MARK: - private methods 私有方法
// MARK: -
// MARK: - public methods 公有方法
// MARK: -
// MARK: - life cycle 视图的生命周期
// MARK: -
// MARK: - StatisticsLog 各种页面统计Log
UIViewController生命周期方法
在 Objective-C 中,UIViewController
的生命周期方法涵盖了视图控制器从创建到销毁的整个过程。以下是这些方法的全面列表,包括它们被调用的时机和一些细节:
- 初始化和加载视图
initWithNibName:bundle:
:使用 nib 文件初始化视图控制器。initWithCoder:
:使用 storyboard 初始化视图控制器。loadView
:加载视图控制器的视图,如果未设置view
属性,此方法会被自动调用。viewDidLoad
:视图加载完成后调用,常用于初始化代码。
- 视图将要出现
viewWillAppear:
:视图将要显示在屏幕上之前调用,可以在此方法中进行界面更新。viewWillLayoutSubviews
:在视图的布局将要发生之前调用,可以在此方法中进行子视图的布局。viewDidLayoutSubviews
:在视图的布局已经完成后调用。
- 视图已经出现
viewDidAppear:
:视图已经显示在屏幕上后调用,可以在此方法中进行界面更新。viewDidDisappear:
:视图从屏幕上消失后调用。
- 内存警告
didReceiveMemoryWarning
:当系统内存不足时调用,视图控制器可以释放一些资源。
- 旋转和大小变化
willRotateToInterfaceOrientation:duration:
:设备将要旋转到指定方向之前调用(iOS 6 及之前版本)。willAnimateRotationToInterfaceOrientation:duration:
:设备将要旋转到指定方向时调用,可以进行动画(iOS 6 及之前版本)。didRotateFromInterfaceOrientation:
:设备从指定方向旋转完成后调用(iOS 6 及之前版本)。viewWillTransitionToSize:withTransitionCoordinator:
:设备将要旋转或视图控制器的尺寸将要变化时调用(iOS 8 及以后版本)。viewDidTransitionFromSize:withTransitioningCoordinator:
:设备旋转完成或视图控制器尺寸变化完成后调用(iOS 8 及以后版本)。
- 交互
shouldAutorotate
:询问视图控制器是否支持自动旋转(iOS 6 及之前版本)。supportedInterfaceOrientations
:返回视图控制器支持的界面方向。preferredInterfaceOrientationForPresentation
:返回视图控制器的首选显示方向。
- 交互消失
viewWillDisappear:
:视图将要消失时调用。viewWillUnload
:视图将要被销毁时调用,iOS 6 以后版本中不再推荐使用。
- 终止
dealloc
:视图控制器被销毁时调用。
请注意,从 iOS 6 开始,苹果推荐使用自动旋转支持方法(shouldAutorotate
、supportedInterfaceOrientations
和 preferredInterfaceOrientationForPresentation
)来处理设备方向变化,而不是使用 willRotateToInterfaceOrientation:duration:
等方法。此外,viewWillUnload
方法在 iOS 6 及以后的版本中不再被调用,苹果推荐使用 viewDidDisappear:
来替代。
这些方法为视图控制器的生命周期提供了丰富的控制点,允许开发者在适当的时机进行资源管理、界面更新和状态保存。
UIViewController的示例代码如下:
以下是一些示例代码,展示了在 Objective-C 中如何实现 UIViewController
生命周期方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
// ViewController.m
#import "ViewController.h"
@implementation ViewController
// 初始化和加载视图
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView {
[super loadView];
// Create your custom view here if not using a nib or storyboard
}
- (void)viewDidLoad {
[super viewDidLoad];
// Perform additional setup after loading the view, typically from a nib.
}
// 视图将要出现
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// Prepare your view for display
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
// Layout your subviews here
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
// Perform any additional layout here
}
// 视图已经出现
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Update your UI here
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// Prepare your view for disappearance
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// Clean up after your view disappears
}
// 内存警告
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Release any cached data, images, etc. that aren't in use
}
// 旋转和大小变化
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Handle the transition to a different size
}
- (void)viewDidTransitionFromSize:(CGSize)fromSize withTransitioningCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewDidTransitionFromSize:fromSize withTransitioningCoordinator:coordinator];
// Handle the transition completion
}
@end
这段代码展示了 UIViewController
生命周期方法的基本实现。在实际应用中,你需要根据具体需求在这些方法中添加相应的逻辑。例如,在 viewDidLoad
中初始化视图,在 viewWillAppear:
中更新 UI,在 viewWillDisappear:
中保存状态等。