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 自动 ...
随机推荐
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-62 - 判断元素是否可操作
1.简介 有些页面元素的生命周期如同流星一闪,昙花一现.我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒.我们就来判断元素是否显示出现过. 在操作元素之前,可以先判断元素的状 ...
- CSS mask-image 实现边缘淡出过渡效果
使用场景 在生产环境中,遇到一个需求,需要在一个深色风格的大屏页面中,嵌入 Google Maps.为了减少违和感,希望地图四边能够淡出过渡. 这里的"淡出过渡",关键是淡出,而非 ...
- VirtualBox扩容CentOS-7虚拟机磁盘
1.背景描述 如上图所示,根路径"/"所在的文件系统已没有可用的磁盘空间,需要扩容磁盘. df -h 2.VirtualBox操作 2.1.查看当前虚拟磁盘的大小 如上图所示,点击 ...
- 强化学习算法之DQN算法中的经验池的实现,experience_replay_buffer部分的实现
本文的相关链接: github上DQN代码的环境搭建,及运行(Human-Level Control through Deep Reinforcement Learning)conda配置 ----- ...
- Python 计算几月几号是某年的第几天
闰年需要同时满足以下条件: 1.年份能被4整除: 2.年份若是 100 的整数倍的话需被400整除,否则是平年. #!/usr/bin/python # -*- coding: UTF-8 -*- # ...
- win10开启窗口左右分屏方法
首先进入导航栏(等同于按下win徽标): 之后点击电源键上的"设置": 进入"系统" 左边一栏里点击"多任务处理" 打开"贴靠窗囗 ...
- BOM 相关知识总结
一:介绍BOM 1 1.什么是BOM? 2 DOM就是一套操作HTML标签的API(接口/方法/属性) 3 BOM就是一套操作浏览器的API(接口/方法/属性) 4 5 2.BOM中常见的对象 6 w ...
- CH01_WPF概述
第1章:WPF概述 本章目标 了解Windows图形演化 了解WPF高级API 了解分辨率无关性概念 了解WPF体系结构 了解WPF 4.5 WPF概述 欢迎使用 Windows Presenta ...
- python分布式事务方案(一)tcc
python分布式事务方案(一)tcc 随着单体应用的拆分以及服务化的流行,现在分布式事务已经比较常见,分布式事务理论ACID.CAP.BASE等我就不说了,现在就直接说一下一种常见的解决方案-tcc ...
- 获取微信小程序页面路径
2024/07/12 1.步骤 2.注意事项 3.参考 1.步骤 微信公众号关联小程序时需要用到小程序的页面路径,获取步骤如下:' 登录微信公众平台--工具--生成小程序码--获取更多页面路径--填写 ...