IOS UIView的生命周期的实例详解
在iOS开发中,UIView是我们最常用的控件之一。但UIView的生命周期可能并不是每个开发者都完全了解。在本文中,我们将深入探讨UIView的生命周期及其详细解释。
UIView的生命周期及流程
UIView的生命周期是指UIView创建到被销毁的整个过程。UIView的生命周期主要包括以下过程:
- Alloc和Init:分配内存并初始化视图对象
- LoadView:如果没有从XIB文件中加载视图,则会调用此方法
- ViewDidLoad:被加载后调用,但是不要求视图已经在屏幕上渲染
- ViewWillAppear:视图将要显示,此时视图层级已经存在,并且即将在屏幕上渲染
- ViewDidAppear:视图已经显示在屏幕上,并且用户可以进行交互
- ViewWillDisappear:视图将要从屏幕上移除
- ViewDidDisappear:视图已经从屏幕上移除
下面是对UIView生命周期各阶段的解释:
Alloc和Init
当我们创建一个UIView对象时,第一步是分配内存并初始化视图对象。这是必须的,我们需要在内存中为对象分配空间,并对其进行初始化。例如,我们可以创建一个UILabel对象,如下所示:
UILabel *label = [[UILabel alloc] init];
LoadView
如果我们在代码中创建一个视图控制器,那么就会自动调用LoadView方法。但是,如果我们使用了Interface Builder(IB)或Storyboard,那么就不会调用LoadView。当视图控制器尝试引用视图层次结构中未加载到内存的视图时,LoadView方法就被调用。
以下是LoadView在代码中的使用示例:
- (void)loadView {
self.view = [[UIView alloc] init];
self.view.backgroundColor = [UIColor whiteColor];
}
ViewDidLoad
ViewDidLoad方法表示视图控制器已经完成了视图的加载,并且可以对视图进行按需定制或多个初始化任务。但是,在此方法中不能保证视图已经添加到屏幕上,因此任何关于视图位置或大小的计算可能并不准确。
以下是ViewDidLoad在代码中的使用示例:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
ViewWillAppear
视图将要显示,此时视图层级已经存在,并且即将在屏幕上渲染。ViewWillAppear方法是在视图将要出现时调用的,实质上是静态修改视图。我们可以在该方法中做一些如刷新数据、设置导航栏等方法。
以下是ViewWillAppear在代码中的使用示例:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
ViewDidAppear
视图已经显示在屏幕上,并且用户可以进行交互。ViewDidAppear方法是在视图完全展示在屏幕上后调用的。通常我们会在这个方法中做一些如启动定时器、动画效果等方法。
以下是ViewDidAppear在代码中的使用示例:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self startTimer];
}
ViewWillDisappear
视图将要从屏幕上移除。ViewWillDisappear方法是在视图将要从屏幕上移除时调用的。我们可以在该方法中做一些如保存数据、隐藏导航栏等方法。
以下是ViewWillDisappear在代码中的使用示例:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
ViewDidDisappear
视图已经从屏幕上移除。ViewDidDisappear方法是在视图已经从屏幕上移除时调用的。通常我们会在这个方法中做一些如停止定时器、结束动画效果等方法。
以下是ViewDidDisappear在代码中的使用示例:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[self stopTimer];
}
实例1:UIView的生命周期
以下是UIView的生命周期流程的代码示例:
@implementation ViewController
- (void)loadView {
self.view = [[UIView alloc] init];
self.view.backgroundColor = [UIColor whiteColor];
NSLog(@"loadView called, view = %@", self.view);
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad called");
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"viewWillAppear called");
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"viewDidAppear called");
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"viewWillDisappear called");
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
NSLog(@"viewDidDisappear called");
}
@end
实例2:UIView的懒加载
UIView生命周期的流程中它是需要先初始化,这个时候,系统会给UIView分配内存并对其进行初始化,为了避免多余的内存占用,我们可以考虑将UIView的初始化从viewdidload改到懒加载中。懒加载是在需要使用的时候,才会初始化视图控件,这样可以大大减少内存消耗。
以下是UIView懒加载的代码示例:
- (UIButton *)button {
if (!_button) { // 如果button为空,则进行初始化
_button = [[UIButton alloc] initWithFrame:CGRectMake(20, 100, 300, 50)];
[_button setTitle:@"Button" forState:UIControlStateNormal];
[_button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_button];
}
return _button;
}
- (void)buttonTapped:(UIButton *)sender {
NSLog(@"Button Tapped");
}
以上就是UIView的生命周期及其详细解释,以及两个生动的实例说明,希望能够帮助大家更好地理解UIView的生命周期。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IOS UIView的生命周期的实例详解 - Python技术站