iOS的应用生命周期以及应用界面

news2024/9/20 22:48:02

在iOS的原生开发中,我们需要特别关注两个东西:AppDelegate和ViewController。我们主要的编码工作就是在AppDelegate和ViewControlle这两个类中进行的。它们的类图如下图所示:
在这里插入图片描述AppDelegate是应用程序委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate委托协议。UIResponder类可以使子类AppDelegate具有处理响应事件的能力,而UIApplicationDelegate委托协议使AppDelegate能够成为应用程序委托对象,这种对象能够响应应用程序的生命周期,该类中继承的一系列方法在应用生命周期的不同阶段会被回调。相应的,AppDelegate的子类也可以实现这两个功能。
ViewController类继承自UIViewController类,它是视图控制器类,在工程中扮演者根视图和用户事件控制类的角色。

应用程序生命周期

作为应用程序的委托对象,AppDelegate类在应用程序生命周期的不同阶段会回调不同的方法。首先,让我们先了解iOS应用的不同状态及其彼此间的关系。
在这里插入图片描述

  • Not running(非运行状态)。应用没有运行或被系统终止。
  • Inactive(前台非活动状态)。应用正在进入前台状态,但是还不能接受事件处理。
  • Active(前台活动状态)。应用进入前台状态,能接受事件处理。
  • Background(后台状态)。应用进入后台后,依然能够执行代码。如果有可执行的代码,就会执行代码,如果没有可执行的代码或者将可执行的代码执行完毕,应用会马上进入挂起状态。
  • Suspended(挂起状态)。被挂起的应用进入一种“冷冻”状态,不能执行代码。如果系统内存不够,应用会被终止。

在应用状态跃迁的过程中,iOS系统会回调AppDelegate中的一些方法,并且发送一些通知。实际上,在应用的生命周期中用到的方法和通知很多,我们选取几个主要的方法和通知进行纤细介绍。

在这里插入图片描述

为了让大家更直观地了解各状态与其相应地方法、通知间地关系,下面我们以几个应用场景为切入点进行系统分析。

非运行状态——应用启动场景

在这里插入图片描述

点击Home键——应用退出场景

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轻按两下Home键可以快速进入iOS(iOS9及其后续版本)多任务栏,此时可以看到处于后台运行或挂起状态地应用,也可能有处于终止状态地应用。向上滑动应用界面,可以删除这些应用并释放内存。

挂起重新运行场景

在这里插入图片描述

内存清除:应用终止场景

在这里插入图片描述

应用界面

苹果应用程序的界面几乎都是由Cocoa和Cocoa Touch框架中地类和协议等元素构建的,这些元素通过mvc模式有效地组织起来。
macOS应用的界面主要使用Cocoa框架开发,Cocoa是一种为应用程序提供丰富用户体验的框架,其核心是:Foundation和AppKit框架。iOS应用界面主要使用Cocoa Touch框架开发,核心是:foundation和UIKit框架。Cocoa Touch框架有一套自己的MVC模式,其中视图和控制器是UIKit中的UIView(及其子类)和UIViewController(及其子类)。

视图的生命周期

在应用运行过程中视图会显示不同的状态,这就是视图的生命周期。视图生命周期的不同阶段会回调视图控制器的不同方法。
在这里插入图片描述
视图创建并加载到内存中时,会调用viewDidLoad方法,这时视图并未出现。该方法中通常会对所控制的视图进行初始化处理。
视图可见前后会调用:viewWillAppear和viewDidAppear方法,视图不可见前后会调用viewWillDisappear和viewDidDisappear方法。这4个方法调用父类相应的方法以实现其功能,编码时调用父类方法的位置可根据实际情况做调整。
viewDidLoad方法在应用运行的时候只调用一次,二上述4个方法可以被反复调用多次。

视图

在Cocoa Touch框架中,提供了视图的“根”类——UIView。
从继承关系上看,UIView是所有视图的“根”。
在这里插入图片描述
其中,比较特殊的类是UIControl类,该类是控制类,它及其子类都能响应一些高级事件(可以通过xcode中的sent events栏来查看控件是否有高级事件)。,除此之外的类都无法响应高级事件。事实上,视图也可以响应事件,但是这些事件比较低级,需要开发人员自己处理。很多手势的开发都以这些低级事件为基础。

  • 视图分类

    1. 控件。继承UIControl类,能够响应用户高级事件。
    2. 窗口。UIWindow对象。一个iOS应用只有一个UIWindow对象(这点和Android就有很大的区别了,Android是一个activity就持有一个window对象,换句话说一个Android应用是有多个window对象的),它是所有子视图的“根”容器(这点就和Android一致)。
    3. 容器视图。包括UIScrollView、UIToolbar及它们的子类。
    4. 显示视图。UIImageView、UILabel等。
    5. 文本和web视图。
    6. 导航视图。为用户提供从一个屏幕到另一个屏幕的导航(或跳转)视图,包括UITabBar和UINavigationBar。
    7. 警告框和操作表。用于给用户提供一种反馈或者与用户进行交互。
  • 应用界面构建层次
    iOS应用界面是由若干个视图构建而成的,这些视图对象采用树形构建。下图是一个应用界面的构建层次图,该应用有一个UIWindow,其中包含一个UIView根视图。根视图下又有3个子视图——Button1、Label2和UIView(View2),其中子视图UIView(View2)中存在一个按钮Button3。
    一般情况下,应用中只包含一个UIWindow。从UI构建层次上讲,UIWindow包含一个根视图UIView。根视图一般也只有一个,放于UIWindow中。根视图的类型决定了应用程序的类型。
    在这里插入图片描述
    应用界面的构建层次是一种树形结构,“树根”是Window,RootView根视图是“树干”,其他视图对象为“树冠”。在层次结构中,上下两个视图是“父子关系”。除了Window,每个视图的父视图有且只有一个,子视图可以有多个。它们间的关系涉及3个属性。

  • superview。获得父视图对象。

  • subviews。获得子视图对象集合。

  • window。获得视图所在的界面Window对象。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

业务设计——责任链验证推翻 if-else 炼狱

责任链模式 1. 什么是责任链模式 在责任链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条,链…

Proteus仿真--左右来回流水灯仿真(仿真文件+程序)

本文主要介绍基于51单片机的流水灯仿真(完整仿真源文件及代码见文末链接) 仿真运行视频 Proteus仿真--基于51单片机的流水灯仿真(左右来回) 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu.com/s/1pS1rHGOhwYgP…

springboot+vue基于协同过滤算法的私人诊所管理系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

MySQL Server 5.5 软件和安装配置教程

MySQL 5.5.58(32/64位)下载链接: 百度网盘:百度网盘 请输入提取码 提取密码:7act 软件简介: MySQL 是由瑞典MySQL AB 公司开发一个关系型数据库管理系统,目前属于 Oracle 旗下产品。MySQL 是最…

15KW永磁同步电动机设计

摘 要 在我们日常生活中,永磁同步电机随处可见,因为其相比其他电机而言结构相对简单,运行稳定且便于维修等优势,最重要的是永磁同步电机在调速方面具有很好的优势。随着自动控制技术和微电子技术的不断革新,目前的技术…

她从家乡自贡起步,努力奋斗进京任职

读罢“北京文博”于2023年10月14日发表的新闻报道《文明互鉴 文明共兴——2023国际城市媒体北京论坛在京举行》,心中甚为欣慰。因为当年从笔者家乡走出去的70后女青年吴旭,现在令人惊喜地已经成长为中华全国新闻工作者协会党组成员、中宣部对外推广局局长…

高等数学前置知识——一次函数

文章目录 一次函数1.1 一次函数1.2 正比例函数1.3 一次函数的平移1.4 一次函数常用知识 一次函数 1.1 一次函数 一次函数的定义为:y kx b ,k ≠ 0。 ​ 注:在这个函数中k代表斜率,b代表与y轴的截距。当 x 0 时,y…

挖坑法,Hoare,非递归法实现快速排序

时间:O(N*lgn)->最坏n^2(有序,逆序) 空间:logN N*2 Hoare Hoare法与其他快速排序算法的不同之处在于它使用两个指针(分别指向数组的起始位置和结束位置),并通过交换元素的方式来确定基准值的最终位置。…

python 安装成功后终端显示的还是低版本

如果你下载了新版的 Python,但在使用时发现仍然是之前的版本,可能是因为新版的 Python 没有替代系统环境中的旧版 Python。 检查 PATH 环境变量:在命令行中输入 python --version 来查看当前默认的 Python 版本。如果显示的是旧版 Python 的…

Zotero背景设置护眼模式

一、背景知识 Zotero是开源的文献管理工具,功能非常强大,可以安装多款插件。对我来说,其最大的优点是可以对文章分类和打标签,因为某个瞬间,我经常想起论文中的一个图片,或者某个细节,但是却记…

Android:窗口管理器WindowManager

Android:窗口管理器WindowManager 导言 本篇文章主要是对Android中与窗口(Window)有关的知识的介绍,主要涉及到的有: WindowWindowManagerWindowManagerService 主要是为了更进一步地向下地深入Android屏幕渲染的知识(虽然窗口…

vlc打开网络流(如rtmp),并查看媒体信息

打开vlc 选择媒体,打开网络串流 输入rtmp地址,点击播放 选择工具-编解码信息 可以查看节目的编码信息什么的

口袋参谋:如何快速挑选宝贝核心关键词?三种方法,简单有效!

做电商,一定要会选择关键词!这是我近十年做电商的经验之谈。 不管是标题还是直通车推广,都需要选择与产品相关度高、符合买家搜索习惯的关键词,只有这样,才能吸引更多自然流量!有了流量加持,还…

C#学习相关系列之多线程(七)---Task的相关属性用法

一、Task和Thread的区别 任务是架构在线程之上的,任务最终的执行还是要给到线程去执行的。任务和线程之间不是一对一的关系,任务更像线程池,任务相比线程池有很小的开销和精确的控制。(总的来说Task的用法更为先进,在多线程的时候…

人工智能基础_机器学习008_使用正规方程_损失函数进行计算_一元一次和二元一次方程演示_sklearn线性回归演示---人工智能工作笔记0048

自然界很多都是正态分布的,身高,年龄,体重...但是财富不是. 然后我们来看一下这个y = wx+b 线性回归方程. 然后我们用上面的代码演示. 可以看到首先import numpy as np 导入numby 数据计算库 import matplotlib.pyplot as plt 然后导入图形画的库 然后: X = np.linspace(0,…

【计算机毕设经典案例】基于微信小程序的图书管理系统

前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 👉IT源码社-SpringBoot优质案例推荐👈 👉IT源码社-小程序优质案例…

数组与链表算法-数组与多项式

目录 数组与链表算法-数组与多项式 多项式数组表达式 C代码 数组与链表算法-数组与多项式 多项式是数学中相当重要的表达方式,如果使用计算机来处理多项式的各种相关运算,那么通常使用数组或链表来存储多项式。 多项式数组表达式 假如一个多项&…

网络安全(黑客技术)—小白自学

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类&am…

PostgreSQL 基础知识

执行环境: psql 1. 创建一个表格 CREATE TABLE customers ( customer_id serial PRIMARY KEY,firstname VARCHAR(100) NOT NULL,lastname VARCHAR(100) NOT NULL,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(50) NOT NULL,email VARCHAR(255) UNIQUE …

Go学习第十三章——Gin(请求与响应)

Go web框架——Gin(请求与响应) 1 响应1.1 String1.2 JSON(*)1.3 HTML(*)1.4 XML1.5 文件(*) 2 请求2.1 请求参数查询参数 (Query)动态参数 (Param)表单参数 (PostForm)原始参数 (Ge…