iOS开发之生命周期

作为一个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开发之生命周期)