首页 » iOS编程(第4版) » iOS编程(第4版)全文在线阅读

《iOS编程(第4版)》18.9 深入学习:应用的状态切换

关灯直达底部

下面通过编写一些简单的测试代码,帮助读者理解应用的各种状态切换。

本书之前介绍过隐式变量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的应用委托对象不会收到任何消息。