下面通过编写一些简单的测试代码,帮助读者理解应用的各种状态切换。
本书之前介绍过隐式变量self,self指向执行当前方法的对象。除了self,还有一个名为_cmd的隐式变量,它是当前方法的选择器。NSStringFromSelector函数可以根据指定的选择器生成相应的字符串。
在BNRAppDelegate.m中,实现和应用状态切换有关的委托方法,并向控制台输出当前方法的方法名。需要加入的方法共有四个(在加入方法前,先检查Xcode是否已经在BNRAppDelegate.m中创建了相应的方法),代码如下:
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
}
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
}
在application:didFinishLaunchingWithOptions:起始处和applicationDid- EnterBackground:起始处加入以下代码。
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
…
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@“%@”, NSStringFromSelector(_cmd));
[[BNRItemStore sharedStore] saveChanges];
}
构建并运行应用。控制台应该会先输出application:didFinishLaunching- WithOptions:,然后输出applicationDidBecomeActive:。
按下主屏幕按钮,通过控制台的输出可知,Homepwner会先进入未激活状态,然后马上进入后台运行状态。按下主屏幕上的Homepwner图标或者在多任务界面选择Homepwner,重新启动应用。通过控制台的输出可知,Homepwner会先进入前台工作状态,然后进入激活状态。
按下主屏幕按钮,再次退出应用。连按主屏幕按钮,打开多任务界面,将Homepwner界面的缩略图向上滑出屏幕,系统会立刻终止Homepwner,但是Homepwner的应用委托对象不会收到任何消息。