iOS - UIApplicationDelegate简介

对于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简介)