iOS-生命周期

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

#pragma mark 告诉代理进程启动但还没有进入状态保存

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    NSLog(@"1.willFinishLaunchingWithOptions");

    return YES;

}

#pragma mark 告诉代理启动基本完成程序准备开始运行

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

    

    NSLog(@"2.didFinishLaunchingWithOptions");

    return YES;

    

    /**

     1,此时控件才加载完成,才能获取到控件的具体frame值。

     */

}

#pragma mark 程序进入活跃状态执行,在此期间应用程序可以接收消息或者事件。

- (void)applicationDidBecomeActive:(UIApplication *)application

{

    NSLog(@"3.applicationDidBecomeActive");

    

    /**

     当程序回到active状态,

     applicationDidBecomeActive: 方法应该上面提到的任务重新开始,

     比如重新开始timer,继承分发队列,提高OpenGL ES的帧率。

     不过游戏要回到暂停状态,不能自动开始。

     */

}

#pragma mark 当程序将要进入非活跃状态执行,在此期间,应用程序不接收消息或者事件,比如来电话了

- (void)applicationWillResignActive:(UIApplication *)application {

    NSLog(@"4.applicationWillResignActive");

    

    /**响应中断: 当一个基于警告式的中断发生时,程序会进入Inactive状态。

     1.停止timer和其他周期性的任务

     2.停止任何正在运行的请求

     3.暂停视频播放器

     4.如果是游戏那么就暂停他

     5.减少OpenGL ES的帧率

     6.挂起任何分发的队列和不重要的操作队列(可以继续处理网络请求或者其他时间敏感的后台任务)

     */

}

#pragma mark 当程序被推送到后台的时候调用,所以要设置后台继续运行,则在这个函数中设置即可

- (void)applicationDidEnterBackground:(UIApplication *)application {

    NSLog(@"5.applicationDidEnterBackground");

  

    /**当程序进入后台时,需要做的事情

     1.保存用户数据或者状态信息,所有没写到磁盘的文件或者信息,

       在进入后台时,最后都要写入到磁盘中去,因为程序可能在后台被杀死。

     2.释放尽可能多的内存

     */

    

    /**

     applicationDidEnterBackgound: 方法有大概5秒的时间让你完成这些任务。

     如果超过时间还有未完成的任务,你的程序就会被终止而且从内存中清除。

     如果还需要长时间的运行任务,可以调用  

     beginBackgroundTaskWithExpirationHandler方法,

     去请求后台运行时间和启动线程来运行长时间运行的任务

     */

    //申请backgroundTask,实现一个可以运行几分钟的权限

    [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

    

    

    /**应用程序在后台时的内存使用

     1.在后台时,每个应用程序都应该释放最大的内存。

     系统努力的保持更多的应用程序在后台同时运行。

     不过当内存不足时,会终止一些挂起的程序来回收内存,那些内存最大的程序首先被终止。

     2.事实上,应用程序应该的对象如果不再使用了,那就应该尽快的去掉强引用,这样编译器可以回收这些内存。

     如果你想缓存一些对象提升程序的性能,你可以在进入后台时,把这些对象去掉强引用。

     3.下面这样的对象应该尽快的去掉强引用:

     (1)图片对象

     (2)你可以重新加载的 大的视频或数据文件

     (3)任何没用而且可以轻易创建的对象

     4.在后台时,为了减少程序占用的内存,系统会自动在回收一些系统帮助你开辟的内存。比如:

     系统回收Core Animation的后备存储。

     去掉任何系统引用的缓存图片

     去掉系统管理数据缓存强引用

     

     */

  

}

#pragma mark 当应用程序从后台将要重新回到前台的时候调用。

- (void)applicationWillEnterForeground:(UIApplication *)application {

    NSLog(@"6.applicationWillEnterForeground");

}

#pragma mark 当程序将要退出时被调用,通常是用来保存数据和一些退出的清理工作。这个需要设置UIApplicationExitsOnSuspend的键值

- (void)applicationWillTerminate:(UIApplication *)application {

    NSLog(@"7.applicationWillTerminate");

}

#pragma mark 当程序载入后执行

- (void)applicationDidFinishLaunching:(UIApplication *)application

{

    NSLog(@"8.applicationDidFinishLaunching");

}

@end

你的一次推荐就是对我莫大的支持。感觉不错,给个推荐或者评论吧。
原文地址:https://www.cnblogs.com/mancong/p/5133531.html