iOS程序执行顺序和UIViewController的生命周期
一、程序的执行顺序
启动程序
--- -[AppDelegate application:didFinishLaunchingWithOptions:] ---
--- -[AppDelegate applicationDidBecomeActive:] ---
按下 Command + H + SHIFT
--- -[AppDelegate applicationWillResignActive:] ---
--- -[AppDelegate applicationDidEnterBackground:] ---
重新点击 进入程序
--- -[AppDelegate applicationWillEnterForeground:] ---
--- -[AppDelegate applicationDidBecomeActive:] ---
选择 模拟器的Simulate Memory Warning
--- -[AppDelegate applicationDidReceiveMemoryWarning:] ---
1.application:didFinishLaunchingWithOptions:
程序首次已经完成启动时执行,一般在这个函数里创建window对象,将程序内容通过window呈现给用户。
2.applicationWillResignActive(非活动)
程序将要失去Active状态时调用,比如有电话进来或者按下Home键,之后程序进入后台状态,对应的applicationWillEnterForeground(即将进入前台)方法。
该函数里面主要执行操作:
a. 暂停正在执行的任务
b. 禁止计时器
c. 减少OpenGL ES帧率
d. 若为游戏应暂停游戏
3.applicationDidEnterBackground(已经进入后台)
对应applicationDidBecomeActive(已经变成前台)
该方法用来:
a. 释放共享资源
b. 保存用户数据(写到硬盘)
c. 作废计时器
d. 保存足够的程序状态以便下次修复;
4.applicationWillEnterForeground(即将进入前台)
程序即将进入前台时调用,对应applicationWillResignActive(即将进入后台),
这个方法用来: 撤销applicationWillResignActive中做的改变。
5.applicationDidBecomeActive(已经进入前台)
程序已经变为Active(前台)时调用。对应applicationDidEnterBackground(已经进入后台)。
注意: 若程序之前在后台,在此方法内刷新用户界面
6.applicationWillTerminate
程序即将退出时调用。记得保存数据,如applicationDidEnterBackground方法一样。
二、视图的生命历程
[ViewController initWithCoder:]或[ViewController initWithNibName:Bundle]: 首先从归档文件中加载UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。
[UIView awakeFromNib]: 作为第一个方法的助手,方法处理一些额外的设置。
[ViewController loadView]:创建或加载一个view并把它赋值给UIViewController的view属性。
-[ViewController viewDidLoad]: 此时整个视图层次(view hierarchy)已经放到内存中,可以移除一些视图,修改约束,加载数据等。
[ViewController viewWillAppear:]: 视图加载完成,并即将显示在屏幕上。还没设置动画,可以改变当前屏幕方向或状态栏的风格等。
[ViewController viewWillLayoutSubviews]即将开始子视图位置布局
[ViewController viewDidLayoutSubviews]用于通知视图的位置布局已经完成
[ViewController viewDidAppear:]:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。
[ViewController viewWillDisappear:]:视图即将消失
[ViewController viewDidDisappear:]:视图已经消失
[ViewController dealloc:]:视图销毁的时候调用
三、总结:
只有init系列的方法,如initWithNibName需要自己调用,其他方法如loadView和awakeFromNib则是系统自动调用。而viewWill/Did系列的方法则类似于回调和通知,也会被自动调用。
纯代码写视图布局时需要注意,要手动调用loadView方法,而且不要调用父类的loadView方法。纯代码和用IB的区别仅存在于loadView方法及其之前,编程时需要注意的也就是loadView方法。
除了initWithNibName和awakeFromNib方法是处理视图控制器外,其他方法都是处理视图。这两个方法在视图控制器的生命周期里只会调用一次。
iOS程序执行顺序和UIViewController的生命周期的更多相关文章
- iOS程序执行顺序和UIViewController 的生命周期(整理)
说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序 ...
- iOS程序的执行顺序 和 UIViewController的生命周期
iOS程序的执行顺序 1 进入程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2 程序完成加载 -[AppDelegate application:didFinishLau ...
- UIViewController的生命周期及iOS程序执行顺序
UIViewController的生命周期及iOS程序执行顺序 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc ...
- iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期
iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要 ...
- UIViewController的生命周期及iOS程序执行顺序 和ios6 处理内存警告
当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc 创建对象,分配空间2.init (initWithN ...
- QF——iOS程序运行原理(APP的生命周期)
iOS程序的运行原理: main.m: 1. main.m 主函数是所有程序的入口函数. 2. 在main函数里是UIApplicationMain函数,开启了一个无限循环,以监听该应用. 该UIAp ...
- IOS第12天(3,UIViewController的生命周期)
#import "HMViewController.h" @interface HMViewController () @property(nonatomic,strong)NSA ...
- [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序
本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...
- PHPWind 8.7中代码结构与程序执行顺序
pw9在此不谈,他是完全重构的作品,是完全MVC下的体系.当然,其中很多东西在PW8.7下已经可见端倪. 主要代码结构 1. 以现代的观点,PW是多入口应用模式,程序根目录下的文件几乎都是入口: 2. ...
- Flex 程序执行顺序!
Flex 执行加载过程会有几个概念:preloader, SystemManager, Flex Application! flex 界面初始化时,看到的 Loading 加载条,那是 flex 自动 ...
随机推荐
- ByteHouse高性能向量检索实践——“以图搜图”
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着 LLM 技术的发展,向量检索与向量数据库也受到业界持续关注,它们能够为LLM提供外置记忆单元,通过提供与 ...
- Typora配置自动上传图片到图床
在多平台发布文章时,如果遇到图片不能导入的问题,推荐使用图床!推荐使用阿里云或腾讯云,免费的不用考虑了! PicGo下载 链接:https://pan.quark.cn/s/2ec95402631 ...
- Accurately computing running variance —— 已知两个数列各自的均值和方差,如何快速求出两个数列拼合后的均值和方差(续)
原内容来自: https://www.johndcook.com/blog/standard_deviation/ 计算公式: 该种计算方式可以只保存历史数据的平方和,与历史数据的和. 相关前文: 已 ...
- 电视家APP会员退款了 —— 网络电视APP的合规性处理
今天打开家里网络电视的时候突然发现"电视家APP"居然无法使用了,随后发现账户关联的银行卡收到退款了,于是好奇的研究了一下这个事情. 由于家里是在农村,闭路电视的图像效果很差,估计 ...
- lua环境配置与编译
1.背景 2.安装lua 官方下载地址:https://joedf.ahkscript.org/LuaBuilds/ 下载后解压即可 解压后: 配置环境变量: 检查是否安装成功: 如果能输出版本号,则 ...
- spring5的新特性
1.背景 2.依赖环境的变化 整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 3.自带了通用的日志封装 3.1.日志的简单使用 Spr ...
- vue项目之主页布局
1.背景 2.基本结构 代码: <template> <el-container class="home-container"> <!-- 头部--& ...
- Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSON Schema呢? 在数据交换领域,JSON Schema 以其强大的标准化能力,为定义和规范 JSON 数据的结构与规则提供 ...
- React 18 自定义 Hook 获取 useState 最新值
原理:通过同步更新 useRef 来获取最新值 // util.ts export const useRefState = (init: any = null) => { const [sta ...
- SLF4J+Logback日志搭建
一.jar包依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api< ...