zoukankan      html  css  js  c++  java
  • 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

    你的一次推荐就是对我莫大的支持。感觉不错,给个推荐或者评论吧。
  • 相关阅读:
    在linux写一个shell脚本用maven git自动更新代码并且打包部署
    maven mvn 命令行 编译打包
    linux修改文件为可执行文件
    shell脚本中根据端口号kill对应的应用进程
    linux如何查看端口被哪个进程占用?
    LINUX中如何查看某个端口是否被占用
    The JAVA_HOME environment variable is not defined correctly的错误
    Linux配置Java环境变量
    requests
    https://www.cnblogs.com/zheting/category/1086753.html
  • 原文地址:https://www.cnblogs.com/mancong/p/5133531.html
Copyright © 2011-2022 走看看