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

UIViewController生命周期

生命周期

viewController有自己的生命周期,如图:

  • init:初始化程序

  • loadView() 当需要展示UIViewController的view为空时调用

  • viewDidLoad() 视图加载完成后调用,类成员对象和变量的初始化都在这里再创建类后无论视图展现还是消失,这个方法都只会在布局时调用一次

  • viewWillAppear() 视图即将展现时调用

  • viewDidAppear() 视图已经出现时调用

  • viewWillLayoutSubviews() 用于处理视图布局时的变化,通常在这里执行与布局相关的操作,在子视图重新布局之前调用

  • viewDidLayoutSubviews() 用于处理视图布局的变化, 在子视图重新布局结束后调用

  • viewWillDisappear() 视图即将消失时调用

  • viewDidDisappear() 视图已经消失时调用

  • traitCollectionDidChange() 视图控制器的特征集合发生变化时调用

  • didRecieveMemoryWarning() 系统内存不足时调用

初始化

init方法:初始化UIViewController,执行关键数据初始化操作,不要在此操作view,view只有在loadView:方法中才调用(UIViewController的view是懒加载实现的),在init方法中,view还没创建,用不了self.view。

加载视图

  • loadView:方法是在UIViewcontroller对象被访问且为nil时调用,该方法会加载并创建一个view并将其赋值给自身的view属性。没有特别情况该方法在viewcontrollrer中只调用一次。可以重写该方法手动初始化view。该方法中不能使用super(如果完全自己画UI的话)

  • viewDIdLoad:view加载完成后调用,通常情况下,各种初始化数据的载入、初始设定,修改约束,移除视图等很多操作都可以在这个方法中实现‘

  • viewWillAppear:系统在载入所有的数据后,将会在屏幕上显示视图,这时会先调用这个方法,通常会在这个方法中对即将显示的视图做进一步设置。

  • viewDidAppear:UIViewController对象的视图已经加载到窗口时调用,可以对正在显示的视图做设置

  • viewWillDisAppear:视图控制器对象即将消失、被覆盖或者隐藏时调用

  • viewDidDisAppear:视图控制器对象已经消失、被覆盖、或是隐藏时调用

内存警告

didRecieveMemoryWarning: 在内存足够的情况下,app的视图通常会一直报存在内存中。如果内存不够,系统会向app发送内存警告,此时会调用该方法。会释放掉自己拥有的视图。系统只会释放内存,不会释放对象的所有权。就是说对象仍然存在,但是内部的数据被释放了。

视图销毁

dealloc方法:销毁视图,释放资源。当对象的引用计数为0时自动调用

注意

viewDidload可能调用多次,而loadView只调用一次(一般情况下)

示例

#import <UIKit/UIKit.h>
​
NS_ASSUME_NONNULL_BEGIN
​
@interface FirstVC : UIViewController
​
@end
​
NS_ASSUME_NONNULL_END
​
​
#import "FirstVC.h"
#import "SecondVC.h"
@interface FirstVC ()
​
@end
​
@implementation FirstVC
​
- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor yellowColor];self.title = @"视图一";// Do any additional setup after loading the view.
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {SecondVC* vc = [[SecondVC alloc] init];[self.navigationController pushViewController:vc animated:YES];
}
@end
#import <UIKit/UIKit.h>
​
NS_ASSUME_NONNULL_BEGIN
​
@interface SecondVC : UIViewController
​
@end
​
NS_ASSUME_NONNULL_END
​
#import "SecondVC.h"
​
@interface SecondVC ()
​
@end
​
@implementation SecondVC
​
- (void)viewDidLoad {[super viewDidLoad];self.title = @"视图二";self.view.backgroundColor = [UIColor systemBlueColor];// Do any additional setup after loading the view.NSLog(@"%s", __func__);
}
​
- (void)loadView {[super loadView];NSLog(@"%s", __func__);
}
​
- (instancetype)init {self = [super init];NSLog(@"%s", __func__);return self;
}
​
- (void)viewWillAppear:(BOOL)animated {NSLog(@"%s", __func__);
}
​
- (void)viewDidAppear:(BOOL)animated {NSLog(@"%s", __func__);
}
​
- (void)viewWillLayoutSubviews {NSLog(@"%s", __func__);
}
​
- (void)viewWillDisappear:(BOOL)animated {NSLog(@"%s", __func__);
}
​
- (void)viewDidDisappear:(BOOL)animated {NSLog(@"%s", __func__);
}
​
- (void)viewDidLayoutSubviews {NSLog(@"%s", __func__);
}
​
​
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {[self.navigationController popViewControllerAnimated:YES];
}
/*
#pragma mark - Navigation
​
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/
​
@end
​

我们打印出结果如下

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

相关文章:

  • Word封面对齐技巧(自制)
  • UE4 UAT 的六大流程 build cook stage pacakge archive deploy 与UAT的参数
  • 硬件(二) 中断、定时器、PWM
  • 当电力设计遇上AI:良策金宝AI如何重构行业效率边界?
  • Linux2.6内核进程O(1)调度队列
  • 电机控制(三)-电机控制方法基础
  • Java集合---Collection接口和Map接口
  • C++:类和对象(中)
  • 在线测评系统---第n天
  • 执行select * from a where rownum<1;,数据库子进程崩溃,业务中断。
  • LabVIEW--二维数组、三维数组、四维数组
  • Pydantic模型验证测试:你的API数据真的安全吗?
  • Selenium 页面加载超时pageLoadTimeout与 iframe加载关系解析
  • 静态电流Iq 和 ICONT_MAX
  • GD32入门到实战32--产品配置参数存储方案 (NORFLASH)
  • rabbitmq 入门知识点
  • Go 自建库的使用教程与测试
  • 脑卒中目标检测含完整数据集
  • CSS 优先级详解:理解选择器权重和层叠规则
  • 鸿蒙NEXT动画开发指南:组件与页面典型动画场景解析
  • 【C++练习】06.输出100以内的所有素数
  • Java 攻克 PDF 表格数据提取:从棘手挑战到自动化实践
  • 深度学习——数据增强
  • devcpp 5.11的详细安装步骤
  • 上位机知识篇---conda run
  • 文华财经多空提示指标公式 变色K线多空明确指标 文华wh6赢顺多空买卖提示指标
  • 平衡车 --- 测量减速比 M法、T法测速
  • 当公司在你电脑上安装了IP-guard,你必须知道的事
  • 【面试题】你在项目中做过哪些相关性优化?
  • 【sft技巧】模型微调技巧