一、程序的执行顺序

  启动程序

  --- -[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的生命周期的更多相关文章

  1. iOS程序执行顺序和UIViewController 的生命周期(整理)

    说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序 ...

  2. iOS程序的执行顺序 和 UIViewController的生命周期

    iOS程序的执行顺序 1 进入程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2  程序完成加载 -[AppDelegate application:didFinishLau ...

  3. UIViewController的生命周期及iOS程序执行顺序

    UIViewController的生命周期及iOS程序执行顺序     当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                         ...

  4. iOS程序执行顺序 AppDelegate及 UIViewController 的生命周期

    iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 iOS应用程序的状态切换很重要,而UIViewControler对于iOS这种MVC模式来说尤为重要 ...

  5. UIViewController的生命周期及iOS程序执行顺序 和ios6 处理内存警告

    当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc                                   创建对象,分配空间2.init (initWithN ...

  6. QF——iOS程序运行原理(APP的生命周期)

    iOS程序的运行原理: main.m: 1. main.m 主函数是所有程序的入口函数. 2. 在main函数里是UIApplicationMain函数,开启了一个无限循环,以监听该应用. 该UIAp ...

  7. IOS第12天(3,UIViewController的生命周期)

    #import "HMViewController.h" @interface HMViewController () @property(nonatomic,strong)NSA ...

  8. [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序

    本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...

  9. PHPWind 8.7中代码结构与程序执行顺序

    pw9在此不谈,他是完全重构的作品,是完全MVC下的体系.当然,其中很多东西在PW8.7下已经可见端倪. 主要代码结构 1. 以现代的观点,PW是多入口应用模式,程序根目录下的文件几乎都是入口: 2. ...

  10. Flex 程序执行顺序!

    Flex 执行加载过程会有几个概念:preloader, SystemManager, Flex Application! flex 界面初始化时,看到的 Loading 加载条,那是 flex 自动 ...

随机推荐

  1. 对比python学julia(第四章:人工智能)--(第三节)目标检测

    1.1.  项目简介 目标检测(Object Detection)的任务是在图像中找出检测对象的位置和犬小,是计算机视觉领域的核心问题之一,在自动驾驶.机器人和无人机等许多领域极具研究价值. 随着深度 ...

  2. NVIDIA公司官宣最新最高性能的GPU芯片及平台 —— Blackwell GPU

    官宣视频: https://www.youtube.com/watch?v=bMIRhOXAjYk 相关: https://baijiahao.baidu.com/s?id=1793921686210 ...

  3. 【转载】 tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/huitailangyz/article/ ...

  4. IPython notebook(Jupyter notebook) 设置密码

    本文共给出两种密码设置方法,一种为直接设置密码法(较为便捷),另一种为hash密码设置法   =================================== 第一种: 直接设置密码 注意: i ...

  5. 模仿学习算法:Data Aggregation Approach: DAGGER算法——Mixing policy

    论文: <A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning> ...

  6. 在线flex布局----自己写的一个flex布局的小玩意,需要的私聊加关注0.0

  7. 附037.Kubernetes_v1.29.2高可用部署架构二

    部署组件 该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm .kubelet .kubectl. kubeadm介绍 Kubeadm 为构建 Kubernete ...

  8. Codeforces Round894.D

    题目:D. Ice Cream Balls 题目链接:https://codeforces.com/contest/1862/problem/D 思路:二分找到当所有冰淇淋球类型不同的情况下,假设记位 ...

  9. 牛客周赛 Round 8

    牛客周赛 Round 8 A-小美的排列询问_牛客周赛 Round 8 (nowcoder.com) 枚举即可 #include<bits/stdc++.h> using i64 = lo ...

  10. 如何使用Typora写出自己的第一个博客

    markdown的使用说明 一.标题 语法:# 这是一级标题 ##这是二级标题...... 代码: # 这是一级标题 ## 这是二级标题 快捷键: Ctrl+数字:数字1-6可以快速将选中的文本调成对 ...