iOS的应用生命周期以及应用界面-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

在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中。根视图的类型决定了应用程序的类型。
    在这里插入图片描述
    应用界面的构建层次是一种树形结构“树根”是WindowRootView根视图是“树干”其他视图对象为“树冠”。在层次结构中上下两个视图是“父子关系”。除了Window每个视图的父视图有且只有一个子视图可以有多个。它们间的关系涉及3个属性。

  • superview。获得父视图对象。

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6