• iOS的应用生命周期


    在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对象。
      在这里插入图片描述

  • 相关阅读:
    题目0056-员工出勤
    企业为什么做不好生产计划?
    如何修复老照片?这三个方法建议收藏
    MySQL中WEEK()函数刨坑
    华为云中对象存储服务软件开发工具包(OBS SDK) C语言介绍
    Java面试题初级准备
    SpringBoot学习笔记(4)——B站动力节点
    Python实现排序
    顺序表的(增删查改)实现
    Go语言入门【3】条件语句
  • 原文地址:https://blog.csdn.net/qq_36828822/article/details/134085811