IOS-生命周期-Swift

这篇具有很好参考价值的文章主要介绍了IOS-生命周期-Swift。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

App生命周期

应用状态

App主要有五种状态,分别是:

未运行——Not running

应用程序没启动

未激活——Inactive

程序在前台运行,不过没有接收到事件。
一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。

激活——Active

程序在前台运行而且接收到了事件,这也是前台的一个正常的模式。

后台——Backgroud

程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会,时间到之后会进入挂起状态(Suspended),有的程序经过特殊的请求后可以长期处于Backgroud状态。

挂起——Suspended

程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

关系图

IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期

生命周期方法

APP的生命周期就是UIApplicationDelegate中的回调方法,这些方法是根据状态变化进行响应的地方,其中最常用的就是以下7个方法:

application:willFinishLaunchingWithOptions:App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复

application:didFinishLaunchingWithOptions:
表示App将从未运行状态进入运行状态,用于对App的初始化操作

applicationDidBecomeActive:
当应用即将进入前台运行时调用

applicationWillResignActive:
当应用即将进从前台退出时调用

applicationDidEnterBackground:
当应用开始在后台运行的时候调用

applicationWillEnterForeground:
当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用

applicationWillTerminate:
当前应用即将被终止,在终止前调用的函数。通常是用来保存数据和一些退出前的清理工作。如果应用当前处在suspended,此方法不会被调用。 该方法最长运行时限为5秒,过期应用即被kill掉并且移除内存。

相关方法

AppDelegate实现了UIApplicationDelegate,有以下方法可供测试:

	//在App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复
    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        print("willFinishLaunchingWithOptions")
        print("——应用开始加载——")
        return true
    }
    //表示App将从未运行状态进入运行状态,用于对App的初始化操作
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        print("调用:didFinishLaunchingWithOptions")
        print("——应用开始运行——")
        return true
    }
    //当应用即将进入前台运行时调用
    func applicationDidBecomeActive(_ application: UIApplication) {
        print("调用:applicationDidBecomeActive")
        print("——应用即将进入前台——")
    }
    //当应用即将进从前台退出时调用
    func applicationWillResignActive(_ application: UIApplication) {
        print("调用:applicationWillResignActive")
        print("——应用即将从前台退出——")
    }
    //当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用
    func applicationWillEnterForeground(_ application: UIApplication) {
        print("调用:applicationWillEnterForeground")
        print("——应用即将从后台进入前台——")
    }
    //当应用开始在后台运行的时候调用
    func applicationDidEnterBackground(_ application: UIApplication) {
        print("调用:applicationDidEnterBackground")
        print("——应用开始在后台运行——")
    }
    //当前应用即将被终止,在终止前调用的函数。通常是用来保存数据和一些退出前的清理工作。如果应用当前处在suspended,此方法不会被调用。 该方法最长运行时限为5秒,过期应用即被kill掉并且移除内存
    func applicationWillTerminate(_ application: UIApplication) {
        print("调用:applicationWillTerminate")
        print("——应用即将终止——")
    }

注意

IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期

虽然都有这些方法,但是我实测下来,在AppDelegate种有的方法并没有打印信息,也就说明没有被调用。

applicationDidBecomeActive

applicationWillResignActive

applicationWillEnterForeground

applicationDidEnterBackground

这几个方法并没有打印信息,不管我如何在前台或者后台。因此,我又在SceneDelegate中找到了对应的方法:

func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
        print("调用:applicationDidBecomeActive")
        print("——应用即将进入前台——")
    }

    func sceneWillResignActive(_ scene: UIScene) {
        // Called when the scene will move from an active state to an inactive state.
        // This may occur due to temporary interruptions (ex. an incoming phone call).
        print("调用:applicationWillResignActive")
        print("——应用即将从前台退出——")
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
        print("调用:applicationWillEnterForeground")
        print("——应用即将从后台进入前台——")
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        // Called as the scene transitions from the foreground to the background.
        // Use this method to save data, release shared resources, and store enough scene-specific state information
        // to restore the scene back to its current state.
        print("调用:applicationDidEnterBackground")
        print("——应用开始在后台运行——")
    }

IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期
这次就完整的打印了生命周期方法,操作依次是:运行、按一次Home键返回桌面、重新进入App、双击Home键然后Kill掉应用。

在其他地方监听

除了在AppDelegate和SceneDelegate中可以监听生命周期之外,还可以在ViewController等地方监听,代码如下:

	func applicationNotification() {
        //应用开始在后台运行的时候通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
        //当程序从后台将要重新回到前台(但是还没变成Active状态)时候通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
        //应用进入运行状态通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidFinishLaunching), name: UIApplication.didFinishLaunchingNotification, object: nil)
        //应用即将进入前台运行时通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
        //应用即将进从前台退出时通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationWillResignActive), name: UIApplication.willResignActiveNotification, object: nil)
        //应用因内存警告退出通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationDidReceiveMemoryWarning), name: UIApplication.didReceiveMemoryWarningNotification, object: nil)
        //双击Home键杀掉应用通知
        NotificationCenter.default.addObserver(self, selector: #selector(applicationWillTerminate), name: UIApplication.willTerminateNotification, object: nil)
    }
    @objc func applicationDidEnterBackground() {
        print("app status : applicationDidEnterBackground——APP开始在后台运行")
    }

    @objc func applicationWillEnterForeground() {
        print("app status : applicationWillEnterForeground——APP从后台重新进入前台")
    }

    @objc func applicationDidFinishLaunching() {
        print("app status : applicationDidFinishLaunching——APP进入运行状态")
    }
    @objc func applicationDidBecomeActive() {
        print("app status : applicationDidBecomeActive——APP即将进入前台")
    }

    @objc func applicationWillResignActive() {
        print("app status : applicationWillResignActive——APP即将从前台退出")
    }

    @objc func applicationDidReceiveMemoryWarning() {
        print("app status : applicationDidReceiveMemoryWarning——APP因内存警告退出")
    }

    @objc func applicationWillTerminate() {
        print("app status : applicationWillTerminate——APP应用将被终止")
    }

结果如图:
IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期

ViewController生命周期

常用的控制器生命周期方法如下:

	override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad-当视图控制器的视图加载完成后调用")
    }
    override func viewWillAppear(_ animated: Bool) {
        print("viewWillAppear-当视图即将显示在屏幕上时调用")
    }
    override func viewWillLayoutSubviews() {
        print("viewWillLayoutSubviews-将要对子视图进行调整")
    }
    override func viewDidLayoutSubviews() {
        print("viewDidLayoutSubviews-对子视图调整完毕")
    }
    override func viewDidAppear(_ animated: Bool) {
        print("viewDidAppear-当视图已经显示在屏幕上时调用")
    }
    override func viewWillDisappear(_ animated: Bool) {
        print("viewWillDisappear-当视图即将从屏幕上消失时调用")
    }
    override func viewDidDisappear(_ animated: Bool) {
        print("viewDidDisappear-当视图已经从屏幕上消失时调用")
    }
    override func didReceiveMemoryWarning() {
        print("didReceiveMemoryWarning-当系统内存不足时调用")
    }

结果如图:
IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期

UIView生命周期

UIView常用的生命周期方法如下:

import Foundation
import UIKit

class Button:UIButton{

    override func willRemoveSubview(_ subview: UIView) {
        super.willRemoveSubview(subview)
        print("willRemoveSubview-当子视图从本视图移除时调用")
    }

    override func willMove(toSuperview newSuperview: UIView?) {
        super.willMove(toSuperview: newSuperview)
        print("willMove-当视图即将加入父视图时 / 当视图即将从父视图移除时调用")
    }

    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        print("didMoveToSuperview-当视图加入父视图时 / 当视图从父视图移除时调用")
    }

    override func willMove(toWindow newWindow: UIWindow?) {
        super.willMove(toWindow: newWindow)
        print("willMove-当视图即将加入window视图时 / 当视图即将从window视图移除时调用")
    }

    override func didMoveToWindow() {
        super.didMoveToWindow()
        print("didMoveToWindow-当视图加入window视图时 / 当视图从window视图移除时调用")
    }
    override func didAddSubview(_ subview: UIView) {
        super.didAddSubview(subview)
        print("didAddSubview-当视图添加子视图时调用")
    }
}

这里是通过创建一个自定义的按钮监听,然后使用:

    var button:Button!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        button=Button(frame: CGRect(x: 100, y: 100, width: 100, height: 80))
        button.backgroundColor=UIColor.orange
        button.setTitle("按钮", for: .normal)
        self.view.addSubview(button)
        button.addTarget(self, action: #selector(click), for: UIControl.Event.touchUpInside)
    }
    @objc func click(){
        button.removeFromSuperview()
    }
    

点击按钮然后将其从父布局中移除,结果如下:
IOS-生命周期-Swift,IOS-Swift学习,ios,swift,生命周期
参考链接:iOS 生命周期 (最新最完整)文章来源地址https://www.toymoban.com/news/detail-819059.html

到了这里,关于IOS-生命周期-Swift的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iOS开发Swift-枚举

    枚举:一组相关的值定义了一个共同的类型,使你可以在代码中以类型安全的方式来使用这些值。 原始值:定义枚举时被预先填充的值。 (1)整数为原始值时,隐式赋值递增1。未设置原始值时,默认为0,之后递增1. (2)字符串为原始值,隐式赋值为枚举成员的名称。

    2024年02月11日
    浏览(33)
  • iOS开发Swift-函数

     (1)无参函数 (2)多参函数 (3)无返回值 (4)多重返回值 (5)可选元组返回类型(元组可以是nil) (6)隐式返回的函数 任一可以被写成一行return的函数,return(x) + for。 调用的时候: 方法名(for: 参数) (1)指定参数标签 (2)忽略参数标签 (3)默认参数值 (4)可变参数 一个可变参数可接受0个或多

    2024年02月11日
    浏览(35)
  • iOS开发Swift-类型转换

    1.Int或Double转字符串 2.Double转Int(去掉小数点后面的) 3.Int转Double 4.向上转型 5.向下转型

    2024年02月09日
    浏览(28)
  • iOS开发Swift-基础部分

    系统可通过赋初始值进行自动推断。 平时可加可不加,同一行中有两句话必须加。 Int           UInt(最好不用) Double 64位 很大/高精度情况下使用 15位小数 Float 32位 对精度要求不高的情况下用 6位小数 十进制数   17 二进制 0b前缀 0b10001 八进制 0o前缀 0o21 十六进制 0x前缀

    2024年02月11日
    浏览(37)
  • iOS开发系列--Swift语言

    Swift是苹果2014年推出的全新的编程语言,它继承了C语言、ObjC的特性,且克服了C语言的兼容性问题。Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中你可以看到C#、Java、Javascript、Python等多种语言的影子。同时在2015年的WWDC上苹果还宣布

    2024年02月06日
    浏览(37)
  • iOS开发Swift-控制流

    (1)复合匹配 (2)区间匹配 (3)元组匹配 (4)值绑定匹配 (5)where continue, break, fallthrough, return, throw continue: 停止本次循环,开始下次循环 break: 立即结束整个控制流。可以使用break忽略switch的分支。 fallthrough贯穿: switch中的case加入贯穿,case会穿透到下一个case/ default。

    2024年02月11日
    浏览(35)
  • 【教程】iOS Swift应用加固

    🔒 保护您的iOS应用免受恶意攻击!在本篇博客中,我们将介绍如何使用HTTPCORE DES加密来加固您的应用程序,并优化其安全性。通过以下步骤,您可以确保您的应用在运行过程中不会遭受数据泄露和未授权访问的风险。 本文将指导您如何通过改变编译方式、处理静态库、解决

    2024年01月23日
    浏览(34)
  • iOS开发Swift-集合类型

    集合基本类型:数组 Array (有序), 集合 Set (无序不重复), 字典 Dictionary (无序键值对) (1)数组的表示 (2)创建空数组 (3)带值数组 (4)两数组相加创建数组 (5)字面量创造数组 (6)访问数组 (7)添加 (8)修改 (9)删除 (10)遍历 同时需要索引和值时: (1)集合的表示 (2)构造一个集合 (3)字面

    2024年02月11日
    浏览(36)
  • iOS_Swift高阶函数

    1.1 定义 高阶函数:higher-order function 如果一个函数: 接受一个或多个函数当作参数 把一个函数当作返回值 那么这个函数就被称做高阶函数。 例如: 看着不像是函数作为参数,是因为 Swift 尾随闭包 Trailing Closure 的特性。 Swift 允许当函数的最后一个参数是闭包时,可以以紧跟

    2024年02月04日
    浏览(24)
  • IOS-高德地图连续定位-Swift

    使用定位功能需要需要接入高德地图定位Api: 在info中新建一个名为Privacy - Location Temporary Usage Description Dictionary的字典,然后在这个字典下新建Privacy - Location When In Use Usage Description、Privacy - Location Always and When In Use Usage Description两个字段,内容就是权限申请时的描述。 实现定

    2024年01月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包