• 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

    你的一次推荐就是对我莫大的支持。感觉不错,给个推荐或者评论吧。
  • 相关阅读:
    nginx端口重定向及反向代理
    Linux Crontab实现定时备份和删除Docker中的Mysql数据库
    Linux创建定时任务
    Docker可视化管理工具Portainer的安装配置及使用
    Centos磁盘扩容-免重启
    使用CSS让网页自适配手机端
    Centos7 安装FTP
    Centos7 部署的Redis无法远程访问
    移动端调试
    select2初始化默认选中值(多选)
  • 原文地址:https://www.cnblogs.com/mancong/p/5133531.html
Copyright © 2020-2023  润新知