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

    你的一次推荐就是对我莫大的支持。感觉不错,给个推荐或者评论吧。
  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/mancong/p/5133531.html
Copyright © 2011-2022 走看看