美文网首页
iOS开发之生命周期

iOS开发之生命周期

作者: 宇宙无敌大强子 | 来源:发表于2021-07-15 21:18 被阅读0次

    作为一个iOS开发者,生命周期是我们无时无刻不在打交道,却又被大多数人忽视的一个东西。这篇文章我把我所了解的所有生命周期,都做一个详细的介绍,希望对大家有帮助。

    一、App的生命周期

    1.App的状态
    • Not Running(未运行):App没有启动。
    • Inactive(未激活):App在前台运行,但是没有接收到事件。当我们的App打开但是没有任何操作(此处的操作不光指手指的操作,还包括代码层面)的时候就处在此状态。
    • Active(激活):App处于前台,并且接收了事件,大多数时候App正常运行时就是处于这个状态。
    • Background(后台):App在后台但是能够执行代码,一般情况下App退到后台后会在此状态下停留5-30秒,之后会进入到下面的挂起状态Suspended,有的程序经过特殊请求后可以长期的处于这一状态(如高德地图)。
    • Suspended(挂起):App进入后台,并且不能执行代码,大多数情况下我们退出App(不杀死)就处于此状态。此时App还是停留在系统的内存中的,当内存过低时,App可能会被系统清理掉,此时我们再此打开App时就是重新打开的。
    2.App的生命周期函数
    /// App将要启动
    /// @param application App对象
    /// @param launchOptions 启动参数
    - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSLog(@"willFinishLaunchingWithOptions - 将要启动");
        return YES;
    }
    
    /// App完成启动(有返回值)
    /// @param application App对象
    /// @param launchOptions 启动参数
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSLog(@"didFinishLaunchingWithOptions - 完成启动(有返回值)");
        return YES;
    }
    
    /// App完成启动(无返回值)
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
        NSLog(@"applicationDidFinishLaunching - 完成启动(无返回值)");
    }
    
    /// App完成激活
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        NSLog(@"DidBecomeActive - 完成激活");
    }
    
    /// App将要注销激活
    - (void)applicationWillResignActive:(UIApplication *)application {
        NSLog(@"WillResignActive - 将要注销激活");
    }
    
    /// App完成进入后台
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        NSLog(@"DidEnterBackground - 完成进入后台");
    }
    
    /// App将要进入前台
    - (void)applicationWillEnterForeground:(UIApplication *)application {
        NSLog(@"WillEnterForeground - 将要进入前台");
    }
    
    /// App将要终止
    - (void)applicationWillTerminate:(UIApplication *)application {
        NSLog(@"WillTerminate - 将要终止");
    }
    

    applicationDidFinishLaunchingdidFinishLaunchingWithOptions 这两个都是App完成启动的函数,当两者都写时,执行后者

    3.App生命周期的详细说明(依次执行的函数)

    启动(未运行 - 激活)
    willFinishLaunchingWithOptions
    didFinishLaunchingWithOptions
    DidBecomeActive

    进入后台(激活 - 后台)
    WillResignActive 进入后台调用瞬间
    DidEnterBackground 已经完全进入后台,iPhone回到桌面

    进入前台(后台/多任务 - 激活)
    WillEnterForeground App激活瞬间的展示动画
    DidBecomeActive 已经完全进入前台,App的画面完全展示

    进入多任务再进入前台(激活 - 多任务 - 激活)
    WillResignActive 激活 - 多任务
    DidBecomeActive 多任务 - 激活
    PS 注意这种情况下,从多任务到激活状态,不会调用WillEnterForeground,因为此时App是还在前台的,虽然画面是多任务

    杀死App(多任务 - 终止)
    DidEnterBackground
    WillTerminate

    二、ViewController的生命周期

    相关文章

      网友评论

          本文标题:iOS开发之生命周期

          本文链接:https://www.haomeiwen.com/subject/grbmpltx.html