iOS - UIApplicationDelegate简介

作者: Mili苗 | 来源:发表于2016-07-28 16:05 被阅读122次

    对于iOS开发者来说,了解应用程序在前台和后台之间的状态切换是很有必要的。在了解切换之前,我们应该先大致了解下应用程序有哪几种状态。

    • 应用程序的状态

    程序的五种状态:

    State 状态 描述
    Not running 未运行 程序没启动
    Inactive 未激活 程序在前台运行,但没有接收到事件。在没有事件处理情况下程序通常停留在这个状态
    Active 激活 程序在前台运行,并且接收到了事件。这也是前台的一个正常的模式
    Backgroud 后台 程序在后台,并且能执行代码。大多数程序进入这个状态后会在这个状态上停留一会,但到一定时间之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态
    Suspended 挂起 程序在后台,不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,但当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存
    • UIApplicationDelegate协议方法

    1.各个程序运行状态时代理的回调:

    - application:willFinishLaunchingWithOptions:
    该方法是程序启动,但还没进入状态保存时执行。

    - application:didFinishLaunchingWithOptions:
    该方法是程序启动基本完成,准备开始运行时执行。

    - applicationDidFinishLaunching:
    该方法在应用程序中不需要用到,用上面那两个方法所代替了。

    - applicationDidBecomeActive:
    该方法是程序进入活动状态时执行。

    - applicationWillResignActive:
    该方法是当程序将要进入非活动状态时执行,在此期间,应用程序不接收消息或事件,比如按下Home键或者来电话了。

    - applicationDidEnterBackground:
    该方法是当程序被推送到后台时执行。

    - applicationWillEnterForeground:
    该方法是当程序从后台将要重新回到前台是执行。

    - applicationWillTerminate:
    该方法是程序将要推出时执行,通常是用来保存数据和一些退出前的清理工作。

    2.几种对程序进行操作时,各个方法的执行顺序

    a. 第一次启动程序:

    -application:willFinishLaunchingWithOptions:
    -applicationDidFinishLaunching:
    -applicationDidBecomeActive:

    b. 按下Home键:

    -applicationWillResignActive:
    -applicationDidEnterBackground:

    c. 从后台启动程序:

    -applicationWillEnterForeground:
    -applicationDidBecomeActive:

    d. 双击Home键,然后退出程序:

    -applicationWillResignActive:
    -applicationDidEnterBackground:
    -applicationWillTerminate:

    • UIApplicationDelegate对应的通知方法

    UIApplicationDelegate的协议方法分别对应相应的通知:

     UIKIT_EXTERN NSString *const UIApplicationDidEnterBackgroundNotification;
     UIKIT_EXTERN NSString *const UIApplicationWillEnterForegroundNotification;
     UIKIT_EXTERN NSString *const UIApplicationDidFinishLaunchingNotification;
     UIKIT_EXTERN NSString *const UIApplicationDidBecomeActiveNotification;
     UIKIT_EXTERN NSString *const UIApplicationWillResignActiveNotification;
     UIKIT_EXTERN NSString *const UIApplicationDidReceiveMemoryWarningNotification;
     UIKIT_EXTERN NSString *const UIApplicationWillTerminateNotification;
    

    在此,我贴心的列举一下使用方法:

    // 自己实现 enterBackground 方法就OK了
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];
    

    贴心小提示:添加了通知,在不用的时候记得要 remove 哦!

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
    

    本人觉得这种通知方法的好处在于,当某个类在状态切换时需要做处理的时候,在当前类中添加通知即可,省的每次做处理都要跑到AppDelegate类中。

    相关文章

      网友评论

        本文标题:iOS - UIApplicationDelegate简介

        本文链接:https://www.haomeiwen.com/subject/hseajttx.html