iOS开辟-视图与视图控制器生命周期
在MVC模型中,V指view,负责用户界面的表现、处置惩罚用户输入,并将输入传递给控制器。C是指ViewController,充当模型和视图之间的中介。控制器吸收用户输入,处置惩罚用户请求,并将结果传递给视图以更新表现。本文详细先容在iOS开辟中UIView与UIViewController的生命周期。UIView 的生命周期
重要包罗以下关键阶段:
[*]初始化 (initWithFrame: or initWithCoder:)
[*]添加到父视图 (willMoveToSuperview: or didMoveToSuperview)
[*]结构子视图 (layoutSubviews)
[*]绘制 (drawRect:)
[*]移除父视图 (willMoveFromSuperview: or didMoveFromSuperview)
[*]销毁 (dealloc)
1. 初始化
initWithFrame:
在代码中创建视图时调用。
- (instancetype)initWithFrame:(CGRect)frame {
self = ;
if (self) {
// 自定义初始化
}
return self;
}initWithCoder:
用于从nib文件或Storyboard中加载视图。这个方法会在视图从接口构建器文件(.xib或.storyboard)解码时调用。参数:NSCoder,用于解码视图属性的解码器对象
- (instancetype)initWithCoder:(NSCoder *)coder {
self = ;
if (self) {
// 自定义初始化
}
return self;
}2. 添加到父视图
willMoveToSuperview:
视图将要被添加到父视图时调用。
- (void)willMoveToSuperview:(UIView *)newSuperview {
;
// 自定义代码
}didMoveToSuperview
视图已经被添加到父视图时调用。
- (void)didMoveToSuperview {
;
// 自定义代码
}3. 结构子视图
layoutSubviews
视图的结构发生变化时调用,用于调整子视图的结构。
- (void)layoutSubviews {
;
// 自定义子视图布局代码
}4. 绘制
drawRect:
视图需要绘制其内容时调用。这是自定义绘制代码的地方。
- (void)drawRect:(CGRect)rect {
// 自定义绘制代码
}5. 移除父视图
willMoveFromSuperview:
视图将要从父视图中移除时调用。
- (void)willMoveFromSuperview:(UIView *)newSuperview {
;
// 自定义代码
}didMoveFromSuperview
视图已经从父视图中移除时调用。
- (void)didMoveFromSuperview {
;
// 自定义代码
}6. 销毁
dealloc
视图被销毁时调用,用于释放资源。
- (void)dealloc {
// 释放资源
}视图控制器 (UIViewController) 的生命周期
UIView 与 UIViewController 生命周期的关系
UIView 的生命周期方法通常在 UIViewController 的生命周期方法中被调用。比方:
[*]在 UIViewController 的 viewDidLoad 方法中,视图会被初始化和配置。
[*]在 UIViewController 的 viewWillAppear: 方法中,视图会被添加到窗口并准备表现。
[*]在 UIViewController 的 viewWillDisappear: 方法中,视图会从窗口中移除。
1. init
init 方法是视图控制器的初始化方法。通常用来初始化视图控制器的状态,在这里进行分配内存与初始化实例变量。
- (instancetype)init {
self = ;
if (self) {
// 初始化代码
}
return self;
}2. loadView
loadView 方法是用于创建视图控制器的视图条理结构的。只有当视图控制器的视图属性被访问且为空时,才会调用这个方法。通常不需要手动重写这个方法,除非需要自定义视图条理结构。
- (void)loadView {
// 创建视图层次结构
UIView *view = [ initWithFrame:.bounds];
view.backgroundColor = ;
self.view = view;
}3. viewDidLoad
viewDidLoad 方法在视图控制器的视图加载到内存后调用。适合在这里做视图的进一步初始化和配置。通常在这里添加子视图并设置其属性,大概执行一次性初始化任务,如设置标签按钮等UI组件。
- (void)viewDidLoad {
;
// 视图加载后的初始化
self.view.backgroundColor = ;
UILabel *label = [ initWithFrame:self.view.bounds];
label.text = @"Hello, World!";
label.textAlignment = NSTextAlignmentCenter;
;
}4. viewWillAppear:
viewWillAppear: 方法在视图即将被添加到视图条理结构中并表现在屏幕上时调用。适合在这里做视图表现前的准备工作,比方更新视图内容。
- (void)viewWillAppear:(BOOL)animated {
;
// 视图即将显示
}5. viewDidAppear:
viewDidAppear: 方法在视图已经被添加到视图条理结构中并表现在屏幕上时调用。适合在这里启动需要在视图表现后进行的任务,比方动画和数据加载。
- (void)viewDidAppear:(BOOL)animated {
;
// 视图已经显示
}6. viewWillLayoutSubviews
viewWillLayoutSubviews 方法在视图控制器的视图即将结构其子视图时调用。适合在这里更新子视图的结构。
- (void)viewWillLayoutSubviews {
;
// 更新子视图布局
}7. viewDidLayoutSubviews
viewDidLayoutSubviews 方法在视图控制器的视图已经结构其子视图时调用。适合在这里做结构完成后的调整。
- (void)viewDidLayoutSubviews {
;
// 布局完成后的调整
}8. viewWillDisappear:
viewWillDisappear: 方法在视图即将从视图条理结构中移除时调用。适合在这里做视图消失前的清理工作。
- (void)viewWillDisappear:(BOOL)animated {
;
// 视图即将消失
}9. viewDidDisappear:
viewDidDisappear: 方法在视图已经从视图条理结构中移除时调用。适合在这里做视图消失后的清理工作。
- (void)viewDidDisappear:(BOOL)animated {
;
// 视图已经消失
}10. dealloc
dealloc 方法在视图控制器被销毁时调用。适合在这里做资源释放和清理工作。
- (void)dealloc {
// 释放资源
}参考:
[*]https://www.cnblogs.com/CoderWayne/p/3868535.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]