您的位置:

iOS生命周期详解

在 iOS 应用开发中,了解应用生命周期是非常重要的。应用生命周期指的是应用从启动、进入前台、进入后台,到终止整个过程中,系统会调用哪些方法以及执行哪些操作。这篇文章将从多个方面对 iOS 应用的生命周期进行详细阐述。

一、启动时的生命周期

启动时的生命周期指的是当用户点击应用图标,系统准备开始运行应用时,系统所做的操作和调用的方法。

1、main函数

在 iOS 应用的启动过程中,main函数是整个启动的入口点。在这个函数中,应用程序会初始化所有的全局变量,并创建应用程序委托(AppDelegate)对象。在这个对象中,系统将调用 “application:didFinishLaunchingWithOptions:” 方法。

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }

2、AppDelegate

AppDelegate 是整个应用程序中最重要的对象之一。它是应用程序资源的入口点,并且扮演着委托(Delegate)和通知(Notification)之间的桥梁。

    @interface AppDelegate : UIResponder  

    @property (strong, nonatomic) UIWindow *window;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

    @end

    @implementation AppDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        return YES;
    }

    @end

  

3、Info.plist

Info.plist 是 iOS 应用的配置文件,它包含了应用的基本信息,以及描述应用的属性和行为。在启动应用程序时,系统会读取这个文件并将文件里的内容放到一个字典里,开发者可以在自己的代码中访问这些内容。

二、进入前台的生命周期

当用户点击应用图标启动应用后,应用进入前台的生命周期指应用程序从后台恢复到屏幕前台,并准备开始与用户进行交互。

1、applicationDidBecomeActive

当应用从后台进入前台时,系统会调用应用的委托对象的”applicationDidBecomeActive:” 方法。 在这个方法中,开发者可以执行一些必要的操作,比如更新界面数据和启动计时器。

    - (void)applicationDidBecomeActive:(UIApplication *)application {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

2、applicationWillEnterForeground

当应用程序即将从后台恢复到前台时,系统会向应用程序委托对象发送 “applicationWillEnterForeground:” 消息。 开发人员可以在此方法中实现一些应用程序从后台进入前台之后必须处理的事情。

    - (void)applicationWillEnterForeground:(UIApplication *)application {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

三、进入后台的生命周期

当应用程序被用户关掉,或者用户按下主页键时,应用程序进入后台,此时系统会调用应用委托对象的相关方法。

1、applicationDidEnterBackground

当应用从前台进入后台时,系统会调用应用的委托对象的” applicationDidEnterBackground:”方法。在这个方法中,开发者可以执行一些必要的操作,比如保存用户数据和关闭计时器。

    - (void)applicationDidEnterBackground:(UIApplication *)application {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

2、applicationWillResignActive

当应用从前台进入后台时,系统会调用应用的委托对象的”applicationWillResignActive:” 方法。在这个方法中,开发者可以暂停正在进行的任务,并保持应用程序的状态。

    - (void)applicationWillResignActive:(UIApplication *)application {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

四、退出应用的生命周期

当用户将应用从后台彻底关闭时,进程会被终止,此时系统会调用应用委托对象的 “ applicationWillTerminate:” 方法。

1、applicationWillTerminate

当应用程序即将终止时,系统会向应用程序委托对象发送“applicationWillTerminate:”消息。我们可以在这个方法中执行一些必要的操作,例如保存用户数据。

    - (void)applicationWillTerminate:(UIApplication *)application {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

2、applicationWillTerminate和applicationDidEnterBackground的区别

当应用程序退到后台(不再是活动应用程序)时,applicationWillTerminate方法不会被调用。换句话说,如果应用程序在后台被终止了,那么这个方法是不会被调用的。相反,如果您的应用程序支持后台运行,则在应用程序切换到后台时,系统会调用“applicationDidEnterBackground:” 方法。因此,我们应该在 “applicationDidEnterBackground:” 方法中执行保存操作。

五、总结

本文从启动的生命周期、进入前台的生命周期、进入后台的生命周期和退出应用的生命周期四个方面对 iOS 应用的生命周期进行了详细的阐述。开发者需要了解每个生命周期中方法的具体含义和执行顺序,在开发中才能够更好地进行应用程序的开发和调试。